(char *)0是什么意思?

时间:2016-04-29 06:28:21

标签: c pointers null char-pointer

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

答案稍微偏离了解释答案究竟是什么,但最后的答案提到它是指向地址0处的字符的指针,并且它是空的。这给我带来了两个疑问。

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

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

  3. 编辑: 只是把它放在这里是否有帮助。当我发现execl linux系统调用中的最后一个参数为null并且我看到了一个相当奇怪的语法时,我最初搜索这个问题就出现了:(char *)0。

    感谢。

1 个答案:

答案 0 :(得分:13)

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

(char *) 9没有这么特别的意思。 (char *) 9生成的指针也与实现有关。在大多数实现中,它确实会生成一个char *指向地址9的指针。

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

的内容
int i = 0;
(char *) i;

以上(char *) i(虽然也依赖于实现)通常会产生一个char *指向地址0的指针。禁用特殊处理的关键时刻是表达式中的0不再是常量。