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,而应该用空指针常量或空指针对
指针变量赋值或者初始化的方法。