存储和打印" a" vs' a'

时间:2017-01-19 02:27:57

标签: c char

我明白了,

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;
}

输出 -

我在第二个案例中得到了预期,我只是好奇为什么我在第一个案例中得到@?

2 个答案:

答案 0 :(得分:4)

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

char a = "a";

您将字符串的地址存储到a,而不是第一个字符。这导致从指针到字符的依赖于实现的转换,您看到的结果是因为这导致与@字符相同的字符代码。它通常是不可预测的,因为字符串的地址取决于许多因素。

它相当于:

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

要将第一个字符放入char变量,第二行必须是:

char a = *str;

答案 1 :(得分:0)

因为当你尝试这个时

char ch = "a";

您正在尝试插入字符串,在第二种情况下,您使用的是插入单个字符的格式。所以它没有显示任何错误。