空指针的理解
空指针(null pointer)
空指针:一个被赋值为0的指针
1、空指针常量(null pointer constant)
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
一个表达式的值为0或者为零的表达式被强制转成 (void *)类型,都叫空指针常量
eg: 0 0L 3-3 (void *)0
注意 (char*) 0 不叫空指针常量,只是一个空指针值
2、空指针(null pointer)
如果一个 空指针常量 赋给了一个有类型的指针变量,那么这个指针就叫空指针。它不指向任何的对象或者函数
eg:p是一个指针,进行 p = 0;、p = 0L;、p = '\0';、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后
对于C语言还可以是 (void *)
p 成为一个空指针,并且由系统保证空指针不指向任何实际的对象或者函数。 反过来说,任何对象或者函数的地址都不可能是空指针
3、 NULL
NULL 是一个宏定义(在/usr/include/linux/stddef.h 中定义), 表示一个空指针常量
int *p=NULL; //p为一个空指针
4、空指针的内部实现
标准没有定义空指针指向内存的什么地址,取决于系统的实现,
常见的空指针一般指向 0X0 地址
5、如何判断某个指针是空指针
判断其地址是否是0即可
假设 p 是一个指针变量,q 是一个同类型的空指针,要检查 p 是否是一个空指针
if ( p == 0 )
if ( p == '\0' )
if ( p == 3 - 3 )
if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */
if ( NULL == p )
if ( !p )
if ( p == q )
malloc失败时返回的是空指针
参考:http://baike.baidu.com/view/4130506.htm?fr=aladdin