在C语言中,操作符sizeof()是什么?

5
考虑这个程序。
main()  
{  
 printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));  
}

gcc编译器的输出为:

4 2 4

为什么会这样呢?

6
请检查 sizeof(int)、sizeof(char) 和 sizeof(char *) 的大小。 - Vijay
8
sizeof 不是一个函数,而是一个运算符。 - Bertrand Marron
@Benjamin Button:不同的顺序将符合OP的问题 :) - akira
数值因机器和编译器而异,因此我需要Mohit的答案。 - Vijay
@tusbar:因此,“FYI”,请参考@IVlad的答案。@benjamin button:确实,将每种类型与OP要求的内容匹配仅是一个外观细节,但这样更明显。 - akira
显示剩余5条评论
4个回答

13
假设您在运行32位系统:
字符字面量'3'的大小为4,因为在C语言中字符字面量是整数(但不是C++)。
"3"的大小为2,因为它是一个长度为2的数组字面量(数字3加上NULL终止符)。
文字字面量3的大小为4,因为它是一个整数。

2
这个问题的答案可以帮助解释更多 - https://dev59.com/iHE95IYBdhLWcg3wkeyq - Colin Newell
1
在C语言中,字符字面量的类型是int。但在C++中则不是这样。 - Amardeep AC9MF

12

需要记住以下几点:

  1. sizeof 不是函数,而是运算符。它返回一个类型以sizeof char为单位的大小。换句话说,sizeof char 的值始终为1。
  2. '3' 是一个int
  3. "3" 是一个char[2],包含字符3和空结束符。
  4. 3 是一个int

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

  1. 一个int 需要4个char字节来存储
  2. char[2] 只需要2个char字节即可

1
+1 提到 sizeof 是一个运算符。我的小抱怨是:sizeof(char) 中的大括号属于类型(必需的),在 sizeof '3' 中它们可以(并且应该)省略。 - schot

3

引用K&R的话,

每个编译器都可以根据自己的硬件选择适当的大小,只受短整型和整型至少为16位、长整型至少为32位、且短整型不得长于整型,整型不得长于长整型的限制。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接