空指针的理解

空指针(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 = '';、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 == '' )
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

 

原文地址:https://www.cnblogs.com/siqi/p/4063801.html