在此处调试此代码段时:
int main () {
char str[] = "Stackoverflow";
char a = *str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么a显示为83 'S'?
我想你可能想要澄清不止一件事:
首先,指针str指向存储器字符值的序列的第一个字符,即S,t,a,...然后,*str取消引用该指针,即,它读取该给字符的值str点.因此*str产量S.Statement char a = *str将值S赋给atype的变量char,该变量表示能够存储一个字符的内存部分.通常,char是8位有符号(或无符号)整数值,因此任何简单字符都由-127和+128之间的值(有符号8位值的范围)表示.S例如,字符值似乎根据ASCII表示为整数值83.系统是使用ASCII还是其他字符集是系统定义的,但ASCII是目前最常用的字符集.所以S,83实际上是同一件事,只是当终端将值83打印为字符时,它会打印出来S.反过来说,如果我们将其解释S为整数值,终端将打印83:
#include <stdio.h>
int main() {
printf("'S' as integral value: %d\n", 'S');
printf("83 as character value: %c\n", 83);
char c1 = 'S';
char c2 = 83;
if (c1 == c2) {
printf("c1 and c2 are equal.\n");
} else {
printf("c1 and c2 are not equal.\n");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
'S' as integral value: 83
83 as character value: S
c1 and c2 are equal.
Run Code Online (Sandbox Code Playgroud)