什么(char *)0是什么意思?

问题描述:

这是参照了这个问题一个问题: What does (char *)0 mean in c?什么(char *)0是什么意思?

有答案的解释究竟答案是稍微偏离了,但最终的答复中提到,这是一个指向字符地址为0和它是空的。这给我带来了两个疑惑。

  1. 在C中,我们可以给出的char * 9,并说,这是解决9指针?我们不会得到任何错误或警告?

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

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

谢谢。

+1

您可以定义'的char * p =(字符*)9;'(不含警告),但你无法取消对它的引用,看看到http://c-faq.com/null/ –

+1

很重要知道空指针实际上不一定是指向地址“0”的指针,空指针实际上是系统依赖的。 *但是*,当转换为指针(实际上是任何指针)时,整数零由编译器转换为与系统相关的空指针。 –

(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不再是一个常数。