我明白了,
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;
}
输出 -
我在第二个案例中得到了预期,我只是好奇为什么我在第一个案例中得到@?
答案 0 :(得分:4)
字符串是一个字符数组。当数组用作r值时,它将转换为指向第一个元素的指针。所以当你这样做时:
char a = "a";
您将字符串的地址存储到a
,而不是第一个字符。这导致从指针到字符的依赖于实现的转换,您看到的结果是因为这导致与@
字符相同的字符代码。它通常是不可预测的,因为字符串的地址取决于许多因素。
它相当于:
char *str = "a";
char a = str;
要将第一个字符放入char
变量,第二行必须是:
char a = *str;
答案 1 :(得分:0)
因为当你尝试这个时
char ch = "a";
您正在尝试插入字符串,在第二种情况下,您使用的是插入单个字符的格式。所以它没有显示任何错误。