C / C ++中的单引号,双引号和sizeof('a')

我在C或C ++中查看单引号与双引号的问题。 我不能完全理解给出的解释,所以我写了一个程序:

#include <stdio.h> int main() { char ch = 'a'; printf("sizeof(ch) :%d\n", sizeof(ch)); printf("sizeof(\'a\') :%d\n", sizeof('a')); printf("sizeof(\"a\") :%d\n", sizeof("a")); printf("sizeof(char) :%d\n", sizeof(char)); printf("sizeof(int) :%d\n", sizeof(int)); return 0; } 

我使用gcc和g ++编译它们,这些是我的输出:

GCC:

 sizeof(ch) : 1 sizeof('a') : 4 sizeof("a") : 2 sizeof(char) : 1 sizeof(int) : 4 

克++:

 sizeof(ch) : 1 sizeof('a') : 1 sizeof("a") : 2 sizeof(char) : 1 sizeof(int) : 4 

g ++的输出对我来说是有意义的,我对此毫不怀疑。 在gcc中,需要sizeof('a')sizeof(char)不同的是什么? 这背后有一些实际的原因还是只是历史?

同样在C中,如果char'a'有不同的大小,这是否意味着当我们写出char ch = 'a'; ,我们在做隐式types转换?

在C中,字符常量(如'a'types是int ,在C ++中是char

关于最后一个问题,是的,

 char ch = 'a'; 

导致intchar的隐式转换。

因为没有字符只是intgers链接int一个字符

像一个是62我猜

如果你尝试printf(“%c”,62); 你会看到一个angular色