我有以下代码 -
#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
Here in while()
循环而不是*pc != '\0'
, *pc != 0
用来。
但两种方法给出相同的输出。为什么会这样呢?
A char
实际上只不过是一个小整数,因此可以隐式转换为int
。此外,字符文字(例如'A'
)实际上由编译器表示为int
值(例如文字字符'A'
表示为int
value 65
in ASCII http://en.cppreference.com/w/c/language/ascii编码)。
C 语言允许插入任意整数(可以放入一个char
) using escapes。有两种方法可以转义此类任意值,使用octal https://en.wikipedia.org/wiki/Octal数字,或使用十六进制 https://en.wikipedia.org/wiki/Hexadecimal。例如,A 的 ASCII 值为65
,可以表示为'A'
, '\101'
以八进制表示,'\x41'
以十六进制表示,or plain 65
.
有了这些信息,应该很容易看出字符文字'\0'
是整数的八进制表示0
。那是,'\0' == 0
.
您可以通过打印来轻松验证这一点:
printf("'\\0' = %d\n", '\0');
我提到编译器将所有字符文字视为int
值,但还提到使用转义八进制或十六进制数字的任意数字需要适合char
。这似乎是一个矛盾,但事实并非如此。字符值必须适合char
,但编译器会在内部将其转换为int
当它解析代码时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)