C中的运算符sizeof()

考虑该计划

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。

要记住以下几点:

  1. sizeof不是函数,它是一个运算符。 它以sizeof char为单位返回类型的sizeof char 。 换句话说, sizeof char总是1。
  2. ‘3’是一个int
  3. “3”是char[2] ,字符3是null终止符。
  4. 3是int

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

  1. 一个int需要4个空格来保存它
  2. char[2]自然只需要2个char

引用K&R,

每个编译器都可以自由选择适合自己硬件的大小,只受限于short和int至少为16位,long为至少32位,short不长于int,不超过long 。

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