5

这是一个参考这个问题的问题: What does (char *)0 mean in c?

那里的答案与解释究竟是什么略有不同,但最终的答案提到它是一个指向地址 0 处的字符的指针,并且它是空的。这给我带来了两个疑问。

  1. 在 c 中,我们可以给 char* 9 并说它是指向地址 9 的指针吗?我们不会收到任何错误或警告吗?

  2. 好吧,假设 (char*) 0 确实是指向地址 0 的字符的指针,但是这个地址 0 是什么意思呢?我的意思是我们怎么能说它是空的?在那种情况下, (char*) 1 或 (char*) 2 等的值是多少?

编辑:只是把它放在这里不管它有没有帮助。当我发现execllinux 系统调用中的最后一个参数为 null 并且我看到一个看起来很奇怪的语法时,我开始搜索这个问题:(char *) 0。

谢谢。

4

1 回答 1

17

(char *) 0不是“指向地址 0 处的字符的指针”。在 C(char *) 0中以一种特殊的方式处理 - 它保证产生一个类型的空指针值char *。形式上它不指向任何char对象。它的实际数值(“地址”)是实现定义的,可以对应任何地址,不一定0。例如,如果给定平台为空指针类型的值保留此地址,则可以在数字(char *) 0上生成一个“指向”地址的指针。但同样,从语言的角度来看,空指针值并没有真正指向任何地方。0xFFFFFFFFchar *

(char *) 9没有那么特殊的意义。产生的指针(char *) 9也依赖于实现。在大多数实现中,它确实会产生一个char *指向 address的指针9

为了解决对您的特殊处理,(char *) 0您可以尝试类似的方法

int i = 0;
(char *) i;

上面的(char *) i(尽管也依赖于实现)通常会产生一个char *指向 address的指针00这里禁用特殊处理的关键时刻是表达式中不再是常量这一事实。

于 2016-04-29T06:32:59.713 回答