程序下面产生为什么sizeof字符常量是4个字节?
输出 - 1 4 4
#include<stdio.h>
void main()
{
char ch;
ch='A';
printf("%d %d %d\n",sizeof(ch),sizeof('A'),sizeof(3.2f));
}
为什么是字符常数的大小为4个字节?
程序下面产生为什么sizeof字符常量是4个字节?
输出 - 1 4 4
#include<stdio.h>
void main()
{
char ch;
ch='A';
printf("%d %d %d\n",sizeof(ch),sizeof('A'),sizeof(3.2f));
}
为什么是字符常数的大小为4个字节?
因为根据C标准,字符常量的类型是int
,而不是char
。
因此,实际上,这是您平台上的sizeof(int)
。
细节:根据C标准,有2种文字:_string literal_和_compound literal_。 ''A''不被识别为文字,而是_character constant_。 – chux
@chux - 谢谢。这种标准使用英语的不一致有时候会让我失望。 – StoryTeller
也许不是英语不一致,因为C区分_literal_,它可以有一个地址'printf(“%p \ n”,(void *)&“abc”);',来自_constant_,不能:'printf(“%p \ n”,(void *)& 'a');' – chux
ch是char类型,所以1个字节。
'A'是int型,所以4个字节。因为在C中,字符常量是一个int类型。
最后是浮点值,所以4个字节。
这些值根据您使用的机器而定。
编辑 -
int和浮子的范围取决于所使用的机器上,16位int是32位的int一样普遍。
是的,这是他正在寻找的答案。 '转换为'int' – Nick
什么都不是“转换”字符文字*是*'int'类型 – StoryTeller
我不确定在这里使用单词“转换”是不是更准确要说它*是一个'int'(当你做'ch ='A';'int'被转换为'char')? – sepp2k
因为您平台上的“int”有4个字节。 – Olaf
C字符文字是'sizeof(int)'大。 C++字符文字是'sizeof(char)'大。它不是常量'4',它是'sizeof(int)'。 – Downvoter