什么是C语言中的空指针?
发表于: 2019-07-21 16:10:52 | 已被阅读: 18 | 分类于: C语言
指针是C语言的灵魂,因此随意挑选一个C语言程序项目,一般都能够看到指针的大量应用。而在C语言指针中又有着一类比较特殊的指针,即所谓的“空指针(NULL pointer)”,也是C语言程序开发中不可规避的。本节将以问答的形式讨论C语言中空指针的特性,希望对读者有所帮助。
到底什么是空指针?
对于每一种指针类型,都有一个特殊的值——空指针,空指针与其他所有指针值区分开来,保证其不会指向任何函数或者对象等有意义的数据。因此,取地址运算符 & 永远不会产生空指针,malloc() 函数成功时永远不会返回空指针。
C语言中空指针在概念上不同于未初始化的指针,因为空指针不指向任何函数或对象,而未初始化的指针指向是不确定的,它可能指向任何位置,所以未初始化的指针只是有可能是空指针。
总结一下,
既然C语言空指针可能不为0,那么判断指针是否空指针,缩写成 if(p) 还安全吗?
当然是安全的。C语言需要做布尔判断时,可以使用if(expr) 语句,如果表达式 expr 非零则表示得到真值,否则将得到假值。也就是说,如果程序员写出:
if(p)
C语言编译器其实会将其当作下面这样的语句处理:
if(p != 0)
读者可能会有疑问:上面不是说C语言中的空指针可能不是 0 吗?这种情况下,if(p!=0) 不就没有办法判断 p 究竟是不是空指针了吗?
事实上,C语言编译器在处理代码时