2017-01-19 33 views
-3

我明白,如果我这样做,存储并打印出“a”和“A”

char a= 'a';//gets stored as a 1 byte char 

而且"a"意味着2个字节的字符串\0它的最后一个字节。

如果我游程

int main(void) { 
    char a= "a"; 
    printf("\n\r%c", a); 
    return 0; 
} 

它输出 - @

,如果我跑

int main(void) { 
    char a= 'a'; 
    printf("\n\r%c", a); 
    return 0; 
} 

它输出 - 一个

我得到预期的第二种情况,我只是好奇,为什么我会在第一个案件中获得@?

+4

编译警告。 – Max

回答

4

字符串是一个字符数组。当数组用作r值时,它将转换为指向第一个元素的指针。所以,当你这样做:

char a = "a"; 

要存储的字符串的地址为a,而不是第一个字符。这导致了指针与字符之间的实现相关转换,并且您看到的结果是因为这会产生与@字符相同的字符代码。它通常是不可预知的,因为字符串的地址取决于许多因素。

它等同于:

char *str = "a"; 
char a = str; 

要得到第一个字符到char变量,第二行必须是:

char a = *str; 
+0

完美!谢谢! – Anurag

0

因为当你尝试这个

char ch = "a"; 

你想插入其中,在第二种情况下,你正在使用插入单个字符格式的字符串。所以它不显示任何错误。

相关问题