(char*)0是什么意思?

the*_*mer 5 c null pointers char-pointer

这是一个关于这个问题的问题: (char*)0在c中是什么意思?

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

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

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

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

谢谢.

AnT*_*AnT 15

(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;
Run Code Online (Sandbox Code Playgroud)

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