专栏首页小白帽学习之路空指针 到底是什么意思?

空指针 到底是什么意思?

各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针的名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。

我们讲,每一种指针类型都有一个特殊值——“空指针”。它与同类型的其他所有指针值都不相同,它“保证与任何对象或函数的指针值都不相等”。也就是说,空指针不会指向任何地方,它不是任何对象或函数的地址。简单点说,一个指针不指向任何数据,我们就称之为空指针,用NULL表示。如下所示:

int *p=NULL;

比如我们熟悉的malloc函数,当分配内存失败时就会返回空指针,这是空指针比较典型的用法。这里有一点我们要特别强调:空指针绝对不等同于未初始化的指针。我们前面讲过未初始化的指针通常指的是野指针(关于野指针这里就不再赘述),而空指针可以确保不指向任何对象或函数,而未初始化的指针则可能指向任何地方,这也正是其危害所在。

接下来我们来讲讲NULL,NULL其实是一个宏定义,在头文件中是这样的:

#define NULL ((void*)0)

(void*)0表示把数值 0 强制转换为void*类型,注意是大写的NULL,不是null也不是NUL,null只是普通的标识符,NUL表示的是'\0',是ASCII码表中的第 0 个字符,一般用于字符串的结束标志,而NULL表示的是空指针,可以直接出现在代码中,但NUL不能。

还有一点需要特别说明的是:在源码中用来表示空指针的空指针常量使用整数0,NULL 使 p 指向地址 0,大多数系统中都将 0 作为不被使用的地址,且在很多机器上都在内部釆用所有位都是0的字来表示空指针,但也有系统会使用地址 0,而将 NULL 定义为其他值,所以 NULL 不能说等于0。也就是说定义空指针要写成int *p=NULL而不是int *p=0。

好了,就讲到这里吧,现在你对空指针有更深入的了解了吗?希望对大家有所帮助,感谢耐心阅读!

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:薛定谔的coding猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高难度函数声明 int (*(*pf( )) ( ) ) ( ) 了解一下?

    各位,当你看到上面的函数声明int (*(*pf( )) ( )) ( )时是不是头都大了?那它究竟表示的是什么意思呢?今天我们就拿它分析一下。

    7089bAt@PowerLi
  • 个人年度总结及AWD线下赛复盘

    还好有诸位贵人相助(辅导员们,上一届师兄们,学校各位老师以及实习单位师父), 小的也好有条努力的方向,但是时间紧任务重19年5月份就要比赛了,所以学的真的很粗略...

    7089bAt@PowerLi
  • Kali Linux Web渗透测试手册(第二版) - 5.2 - 识别跨站脚本漏洞

    thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

    7089bAt@PowerLi
  • C语言指针5分钟教程

    指针、引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量。在这份教程里“引用”表示计算机内存地址。从指针指向的内 存...

    猿人谷
  • Golang语言--指针

    在Go中指针是很容易学习的。一些进入编程任务,指针更容易操作,如通过引用调用,需要要使用指针来执行。所以学习指针成为完美Go程序员很有必要。让我们开始学习指针的...

    李海彬
  • 视频流媒体平台编译中如何运用Go语言指针?

    本文讲的也是我们在编译流媒体平台EasyNVR的时候,碰到的go语言指针问题,就打算为大家介绍一下Go语言指针的运用。

    EasyNVR
  • 怎样熟练掌握C语言的指针?

    从事C语言开发已经超过10个年头,越来越觉得指针的方便之处,但在初学者来看指针就是拿下这门编程最大的拦路虎,毕竟很多人开始学习C语言都是激情四射结果遇上了指针猫...

    程序员互动联盟
  • 142. Linked List Cycle II

    首先要证明链表有环: 用快慢两个指针解决。快指针每次走两步,慢指针每次走一步。如果有环,则一定会最终在环内某点相遇。下面证明这一点:

    平凡的学生族
  • 基础知识 | 每日一练(59)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    C语言入门到精通
  • c++三种野指针 野指针的概率即产生原因

    原文链接:https://blog.csdn.net/a2796749/article/details/4689721...

    acoolgiser

扫码关注云+社区

领取腾讯云代金券