在C中,NULL指针和指向0的指针之间有区别吗?如果是这样,什么?

时间:2011-09-30 16:13:30

标签: c pointers null zero

在C中,NULL指针和指向0的指针有什么区别?

5 个答案:

答案 0 :(得分:7)

ISO / IEC 9899:TC2在6.3.2.3 Pointers

中说明
  

3一个值为0的整型常量表达式,或者这样的表达式   强制转换为void *,称为空指针常量.55)如果为null   指针常量被转换为指针类型,由此产生   指针,称为空指针,保证比较不等于a   指向任何对象或函数的指针

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

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

答案 1 :(得分:6)

是的。标准规定NULL总是指向无效的内存。但是它没有声明指针的整数表示必须为0.我从来没有遇到NULL不是0的实现,但标准并没有强制要求。

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

答案 2 :(得分:3)

评估指针上下文中的文字0NULL相同。无论编译器用来表示NULL指针的位模式都是隐藏的。

答案 3 :(得分:1)

旧的comp.lang.c FAQ在空指针上有一个很大的部分,值得一读。

comp.lang.c null pointers

答案 4 :(得分:0)

这个想法是NULL指针应该以某种方式表示无效的内存区域 因此,在较低的存储器段中映射OS代码,因此使用0的值(表示NULL指针),因为存储器中的该区域不属于用户的程序,而是映射到OS代码。