什么(char *)0是什么意思?
这是参照了这个问题一个问题: What does (char *)0 mean in c?什么(char *)0是什么意思?
有答案的解释究竟答案是稍微偏离了,但最终的答复中提到,这是一个指向字符地址为0和它是空的。这给我带来了两个疑惑。
在C中,我们可以给出的char * 9,并说,这是解决9指针?我们不会得到任何错误或警告?
好吧,让我们说,(字符*)0确实是一个指向字符地址为0,但是这是什么地址0是什么意思?我的意思是我们怎么能说它是空的?在这种情况下,(char *)1或(char *)2等的值会是什么?
编辑: 只是把它放在这里,不管它是否有帮助。当我发现linux系统调用中的最后一个参数为空,并且我看到了一个相当奇怪的语法:(char *)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
不再是一个常数。
您可以定义'的char * p =(字符*)9;'(不含警告),但你无法取消对它的引用,看看到http://c-faq.com/null/ –
很重要知道空指针实际上不一定是指向地址“0”的指针,空指针实际上是系统依赖的。 *但是*,当转换为指针(实际上是任何指针)时,整数零由编译器转换为与系统相关的空指针。 –