2010-07-26 82 views
5

考虑程序运营商的sizeof(c)中

main() 
{ 
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3)); 
} 

gcc编译输出为:

4 2 4 

为什么会这样呢?

+6

检查sizeof(int)和sizeof(char)和sizeof(char *) – Vijay 2010-07-26 11:07:57

+8

'sizeof'不是函数,而是运算符。 – 2010-07-26 11:09:18

+0

@benjamin按钮:不同的顺序将匹配OP的质询:) – akira 2010-07-26 11:10:00

回答

13

假设是在32位的系统上运行:

的sizeof字符文字“3”是4,因为字符文字是在C语言中(但不是C++)整数。

sizeof“3”是2,因为它是长度为2(数字3加上NULL终止符)的数组字面量。

sizeof literal 3是4,因为它是一个int。

+2

这个问题的答案有助于解释一些 - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – 2010-07-26 11:11:32

+1

为什么'3'一个整数? – Mohit 2010-07-26 11:12:33

+1

在C中,char文字是int类型的。与C++不同。 – 2010-07-26 11:15:04

0

的sizeof()输出取决于编译器使用的是

12

有几点要记住:

  1. sizeof不是一个函数,这是一个运营商。它返回一个类型的大小,单位为sizeof char。换句话说sizeof char始终是1。
  2. “3”是int
  3. “3”是一个char[2],则字符3空终止。
  4. 3为int

有了这些很容易解释的差异:

  1. 一个int需要4个char S的空间以将其保持
  2. char[2]自然只需要2 char小号
+1

提及'sizeof'是一个运算符。我的Pet peeve:'sizeof(char)'中的括号属于类型(需要它们的地方)。他们可以(也应该)在'sizeof'3''中省略。 – schot 2010-07-26 11:48:37

3

要引用K & R,

每个编译器可以自由地选择其自身 硬件 适当的大小,只服从于所述 限制,即短裤和整数是 至少16位,多头是至少 32位,并且短不超过 int,它不再长于long。