我有以下代码-
#include <stdio.h>
#define LENGTH 5
int main(){
char* ch[LENGTH] = {"Zero", "One", "Two", "Three", "Four"};
char* pc;
char** ppc;
for(int i=0; i<LENGTH; i++){
ppc = ch+i;
pc = *ppc;
while(*pc != 0){
printf("%c ", *pc);
pc = pc +1;
}
printf("\n");
}
return 0;
}
这是一个使用字符串进行多重间接寻址的例子。
输出是
Z e r o
O n e
T w o
T h r e e
F o u r
此处在 while()
循环中使用了 *pc != '\0'
而不是 *pc != 0
。
但是这两种方法都给出了相同的输出。为什么会这样?
最佳答案
char
实际上只不过是一个小整数,因此可以隐式转换为 int
。此外,字 rune 字(例如 'A'
)实际上由编译器表示为 int
值(例如文字字符 'A'
是由 ASCII 编码中的 int
值 65
表示。
C 语言允许使用 escapes 插入任意整数(可以放入 char
)。有两种方法可以使用 octal 来转义此类任意值。数字,或使用 hexadecimal .例如,A 的 ASCII 值是 65
,可以表示为 'A'
,八进制的 '\101'
,'\x41'
为十六进制,或普通65
。
有了这些信息,应该很容易看出字 rune 字 '\0'
是整数 0
的八进制表示。即,'\0' == 0
。
您可以通过打印轻松验证这一点:
printf("'\\0' = %d\n", '\0');
我提到编译器将所有字 rune 字视为 int
值,但也提到使用转义八进制或十六进制数字的任意数字需要适合 char
。这似乎是一个矛盾,但事实并非如此。字符值必须适合 char
,但编译器随后会在解析代码时在内部将其转换为 int
。
关于c - 字符串终止符 '\0' 与整数常量 0 的值如何相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827888/