gpt4 book ai didi

c - 字符串终止符 '\0' 与整数常量 0 的值如何相同?

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:42 26 4
gpt4 key购买 nike

我有以下代码-

#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 编码中的 int65 表示。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com