(char*) 0 是什么意思?
What does (char*) 0 mean?
这是一个参考这个问题的问题:
What does (char *)0 mean in c?
那里的答案稍微偏离了解释答案的确切内容,但最后的答案提到它是一个指向地址 0 处的字符的指针,并且它是空的。这给我带来了两个疑惑。
在c中,我们可以给char*9,说它是一个指向地址9的指针吗?我们不会收到任何错误或警告吗?
好吧,假设 (char*) 0 确实是一个指向地址 0 处字符的指针,但是这个地址 0 是什么意思呢?我的意思是我们怎么能说它是空的呢?在那种情况下, (char*) 1 或 (char*) 2 等的值是多少?
编辑:
只是把它放在这里不管它有没有帮助。当我发现 execl
linux 系统调用中的最后一个参数为 null 并且我看到它的语法看起来很奇怪时,我开始搜索这个问题:(char *) 0.
谢谢。
(char *) 0
不是 "pointer to a character at address 0"。在 C 中,(char *) 0
以一种特殊的方式处理 - 它保证产生类型 char *
的 空指针值 。形式上它不指向任何 char
对象。它的实际数值("address")是实现定义的,可以对应任何地址,不一定是0
。例如。数值上 (char *) 0
可以产生一个 "points" 指向地址 0xFFFFFFFF
的指针,例如,如果给定平台为 char *
类型的空指针值保留此地址。但同样,从语言的角度来看,空指针值并不真正指向任何地方。
(char *) 9
没有这种特殊含义。 (char *) 9
产生的指针也依赖于实现。在大多数实现中,它确实会产生一个指向地址 9
.
的 char *
指针
为了解决 (char *) 0
的特殊待遇,您可以尝试类似
int i = 0;
(char *) i;
上面的(char *) i
(尽管也依赖于实现)通常会产生一个指向地址0
的char *
指针。这里禁用特殊处理的关键时刻是表达式中的 0
不再是常量。
这是一个参考这个问题的问题: What does (char *)0 mean in c?
那里的答案稍微偏离了解释答案的确切内容,但最后的答案提到它是一个指向地址 0 处的字符的指针,并且它是空的。这给我带来了两个疑惑。
在c中,我们可以给char*9,说它是一个指向地址9的指针吗?我们不会收到任何错误或警告吗?
好吧,假设 (char*) 0 确实是一个指向地址 0 处字符的指针,但是这个地址 0 是什么意思呢?我的意思是我们怎么能说它是空的呢?在那种情况下, (char*) 1 或 (char*) 2 等的值是多少?
编辑:
只是把它放在这里不管它有没有帮助。当我发现 execl
linux 系统调用中的最后一个参数为 null 并且我看到它的语法看起来很奇怪时,我开始搜索这个问题:(char *) 0.
谢谢。
(char *) 0
不是 "pointer to a character at address 0"。在 C 中,(char *) 0
以一种特殊的方式处理 - 它保证产生类型 char *
的 空指针值 。形式上它不指向任何 char
对象。它的实际数值("address")是实现定义的,可以对应任何地址,不一定是0
。例如。数值上 (char *) 0
可以产生一个 "points" 指向地址 0xFFFFFFFF
的指针,例如,如果给定平台为 char *
类型的空指针值保留此地址。但同样,从语言的角度来看,空指针值并不真正指向任何地方。
(char *) 9
没有这种特殊含义。 (char *) 9
产生的指针也依赖于实现。在大多数实现中,它确实会产生一个指向地址 9
.
char *
指针
为了解决 (char *) 0
的特殊待遇,您可以尝试类似
int i = 0;
(char *) i;
上面的(char *) i
(尽管也依赖于实现)通常会产生一个指向地址0
的char *
指针。这里禁用特殊处理的关键时刻是表达式中的 0
不再是常量。