【发布时间】:2012-05-23 07:45:24
【问题描述】:
我在看问题Single quotes vs. double quotes in C or 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
g++:
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';,我们在做隐式类型转换?
【问题讨论】:
-
我实际上对
sizeof("a") : 2感到惊讶——这些年来,我一直认为这与sizeof(char*)相同——如果我不知道的话,我可能真的会使用它。跨度>