Sad*_*que 7

ISO/IEC 9899:TC2声明 6.3.2.3 Pointers

3值为0的整型常量表达式或类型为void*的表达式称为空指针常量.55)如果将空指针常量转换为指针类型,则生成的指针称为空指针,保证比较不等于指向任何对象或函数的指针

宏NULL扩展为实现定义的空指针常量.

任何两个空指针都应该相等.


Dav*_*nan 6

就在这里.标准规定NULL总是指向无效的内存.但是它没有声明指针的整数表示必须为0.我从来没有遇到过NULL0以外的实现,但这并不是标准规定的.

请注意,将文字指定给0指针并不意味着指针采用0的整数表示.这意味着将特殊的空指针值赋给指针变量.

  • 还要注意`int*ptr = 0;`由于特殊规则总是导致空指针,因为`0`是所谓的"空指针常量".即使您正在使用空指针与地址0不同的某些特殊实现,这也成立.但是,`int i = 0; int*ptr =(int*)i;`不一定会产生空指针.所以你通常不会遇到"指向0地址的指针",除非在它是空指针的上下文中,但标准允许它. (7认同)