考虑程序运营商的sizeof(c)中
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
从gcc编译输出为:
4 2 4
为什么会这样呢?
考虑程序运营商的sizeof(c)中
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
从gcc编译输出为:
4 2 4
为什么会这样呢?
假设是在32位的系统上运行:
的sizeof字符文字“3”是4,因为字符文字是在C语言中(但不是C++)整数。
sizeof“3”是2,因为它是长度为2(数字3加上NULL终止符)的数组字面量。
sizeof literal 3是4,因为它是一个int。
这个问题的答案有助于解释一些 - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – 2010-07-26 11:11:32
为什么'3'一个整数? – Mohit 2010-07-26 11:12:33
在C中,char文字是int类型的。与C++不同。 – 2010-07-26 11:15:04
的sizeof()输出取决于编译器使用的是
有几点要记住:
sizeof
不是一个函数,这是一个运营商。它返回一个类型的大小,单位为sizeof char
。换句话说sizeof char
始终是1。int
char[2]
,则字符3空终止。int
有了这些很容易解释的差异:
int
需要4个char
S的空间以将其保持char[2]
自然只需要2 char
小号提及'sizeof'是一个运算符。我的Pet peeve:'sizeof(char)'中的括号属于类型(需要它们的地方)。他们可以(也应该)在'sizeof'3''中省略。 – schot 2010-07-26 11:48:37
要引用K & R,
每个编译器可以自由地选择其自身 硬件 适当的大小,只服从于所述 限制,即短裤和整数是 至少16位,多头是至少 32位,并且短不超过 int,它不再长于long。
检查sizeof(int)和sizeof(char)和sizeof(char *) – Vijay 2010-07-26 11:07:57
'sizeof'不是函数,而是运算符。 – 2010-07-26 11:09:18
@benjamin按钮:不同的顺序将匹配OP的质询:) – akira 2010-07-26 11:10:00