考虑这个程序。
为什么会这样呢?
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
gcc编译器的输出为:
4 2 4
为什么会这样呢?
需要记住以下几点:
sizeof
不是函数,而是运算符。它返回一个类型以sizeof char
为单位的大小。换句话说,sizeof char
的值始终为1。int
char[2]
,包含字符3和空结束符。int
有了这些差异很容易解释:
int
需要4个char
字节来存储char[2]
只需要2个char
字节即可sizeof
是一个运算符。我的小抱怨是:sizeof(char)
中的大括号属于类型(必需的),在 sizeof '3'
中它们可以(并且应该)省略。 - schot引用K&R的话,
每个编译器都可以根据自己的硬件选择适当的大小,只受短整型和整型至少为16位、长整型至少为32位、且短整型不得长于整型,整型不得长于长整型的限制。
sizeof() 的输出取决于您使用的编译器
sizeof
不是一个函数,而是一个运算符。 - Bertrand Marron