background image

5,如何判断一个指针是否是一个空指针?

这可以通过与空指针常量或者其它的空指针的比较来实现(注意与空指针的内部表

 

示无关)。例如,假设 p 是一个指针变量,q 

 

是一个同类型的空指针,要检查 p 是

——

否是一个空指针,可以采用下列任意形式之一

它们在实现的功能上都是等价的,

所不同的只是风格的差别。

 

指针变量 p 是空指针的判断:

if ( p == 0 )

if ( p == '\0' )

if ( p == 3 - 3 )

if ( p == NULL )  /* 

 

使用 NULL 

 

必须包含相应的标准库的头文件 */

if ( NULL == p )

if ( !p )

if ( 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 )

...

6,

 

可以用 memset 函数来得到一个空指针吗?

 

这个问题等同于:如果 p 是一个指针变量,那么

memset( &p, 0, sizeof(p) );   

和 p = 0;

是等价的吗?

答案是否定的,虽然在大多数系统上是等价的,但是因为有的系统存在着 非零空指

” 

针 (nonzero null pointer),所以这时两者不等价。由于这个原因,要注意当想

 

将指针设置为空指针的时候不应该使用 memset,而应该用空指针常量或空指针对

指针变量赋值或者初始化的方法。