6

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

4

5 回答 5

7

ISO/IEC 9899:TC2 在6.3.2.3 Pointers

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

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

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

于 2011-09-30T16:20:16.823 回答
6

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

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

于 2011-09-30T16:14:45.377 回答
3

在指针上下文中评估文字0NULL. 编译器用来表示NULL指针的任何位模式都是隐藏的。

于 2011-09-30T16:17:54.593 回答
1

旧的 comp.lang.c 常见问题解答有很大一部分是关于空指针的,值得一读。

comp.lang.c 空指针

于 2011-09-30T16:21:45.730 回答
0

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

于 2011-09-30T16:36:44.283 回答