为什么这个程序提供以下输出?

时间:2014-02-08 08:06:41

标签: c

当我运行这个程序时,它输出了

1,4,4

为什么sizeof('A')给出4个字节? “A”被视为整数吗?如果是这样,为什么呢?

#include<stdio.h>

int main()
{
char ch = 'A';
printf("%d, %d, %d", sizeof(ch), sizeof('A'), sizeof(3.14f));
return 0;
}

此外,当我更换

printf("%d, %d, %d", sizeof(ch), sizeof('A'), sizeof(3.14f));

用,

printf("%d, %d, %d", sizeof(ch), sizeof("A"), sizeof(3.14f));

它给出输出

1,2,4

这更令人困惑。

P.S。:我使用compileonline.com来测试这段代码。

3 个答案:

答案 0 :(得分:4)

在C中,'A'的类型为int,这解释了sizeof('A')4的原因(因为显然您的平台有32位int) 。有关详细信息,请参阅Size of character ('a') in C/C++

编译为C ++时,第一个程序打印1 1 4

"A"是一个字符串文字,由字母A后跟NUL字符组成。由于长度为两个字符,sizeof("A")2

答案 1 :(得分:1)

1.sizeof运算符提供输入参数的大小 2.Vaiable的大小取决于机器(编译器)。在你的情况下它是32位 3。sizeof(ch)=1因为你声明为char 4。sizeof('A')=4因为编译器将文字常量视为整数 5。sizeof("A")=2因为它是一个2个字符串的字符串。在case字符串中,如果你写了一个字符,编译器也会在末尾插入空字符。所以它的大小是2个字节。
4。sizeof(3.13f)=4因为它的浮点大小是4个字节

答案 2 :(得分:0)

我通常建议在类型变量上使用sizeof。在文字常量上使用sizeof似乎令人困惑(除了文字字符串,在编译时计算1 +他们的字符串长度)。

文字'A'位于 C int,您的机器上的尺寸为4。

文字字符串"A"

完全相同
   const char literal_A_string[] = {'A', (char)0};

,其大小显然是2个字节(因为每个文字字符串都附加了一个终结空字节)。