当我运行这个程序时,它输出了
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来测试这段代码。
答案 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个字节(因为每个文字字符串都附加了一个终结空字节)。