为什么这个变量等于一个数字和一个字符?

Veg*_*gas 2 c pointers

在此处调试此代码段时:

int main () {
   char str[] = "Stackoverflow";
   char a = *str;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么a显示为83 'S'

Ste*_*ner 5

我想你可能想要澄清不止一件事:

首先,指针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)