在C中,NULL指针和指向0的指针有什么区别?
答案 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)
评估指针上下文中的文字0
与NULL
相同。无论编译器用来表示NULL
指针的位模式都是隐藏的。
答案 3 :(得分:1)
旧的comp.lang.c FAQ在空指针上有一个很大的部分,值得一读。
答案 4 :(得分:0)
这个想法是NULL
指针应该以某种方式表示无效的内存区域
因此,在较低的存储器段中映射OS代码,因此使用0的值(表示NULL指针),因为存储器中的该区域不属于用户的程序,而是映射到OS代码。