2017-01-09 54 views
0

程序下面产生为什么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个字节?

+2

因为您平台上的“int”有4个字节。 – Olaf

+0

C字符文字是'sizeof(int)'大。 C++字符文字是'sizeof(char)'大。它不是常量'4',它是'sizeof(int)'。 – Downvoter

回答

3

因为根据C标准,字符常量的类型是int,而不是char

因此,实际上,这是您平台上的sizeof(int)

+0

细节:根据C标准,有2种文字:_string literal_和_compound literal_。 ''A''不被识别为文字,而是_character constant_。 – chux

+0

@chux - 谢谢。这种标准使用英语的不一致有时候会让我失望。 – StoryTeller

+0

也许不是英语不一致,因为C区分_literal_,它可以有一个地址'printf(“%p \ n”,(void *)&“abc”);',来自_constant_,不能:'printf(“%p \ n”,(void *)& 'a');' – chux

2

ch是char类型,所以1个字节。

'A'是int型,所以4个字节。因为在C中,字符常量是一个int类型。

最后是浮点值,所以4个字节。

这些值根据您使用的机器而定。

编辑 -

int和浮子的范围取决于所使用的机器上,16位int是32位的int一样普遍。

+0

是的,这是他正在寻找的答案。 '转换为'int' – Nick

+4

什么都不是“转换”字符文字*是*'int'类型 – StoryTeller

+3

我不确定在这里使用单词“转换”是不是更准确要说它*是一个'int'(当你做'ch ='A';'int'被转换为'char')? – sepp2k

相关问题