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

标签 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 等的值是多少?

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

谢谢。

最佳答案

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

(char *) 9 没有这种特殊含义。 (char *) 9 产生的指针也是依赖于实现的。在大多数实现中,它确实会产生一个指向地址 9char * 指针。

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

int i = 0;
(char *) i;

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

关于c - (char*) 0 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36931022/

相关文章:

c - 跨进程共享库

c - 链接列表让我的大脑变得困惑。我应该怎么做?

c# - 将 'var' 初始化为 null

c++ - 为什么我不能在 C++ 中使用不同的指针访问 int?

java - 在 Java 中避免 != null 有什么好处?

c - '\0' evaluates false, "\0"评估为真

c - 在C中包含头文件并编译

c - 使用指针对多维数组元素赋值

c - 为什么这不能正确打印我输入的用户名?

C 钩子(Hook)/回调系统