请解释sizeof()的输出
我是c编程的新手,我正在尝试理解sizeof
函数。
请帮我理解这个程序是如何工作的:
#include main( ) { printf ( "\n%d %d %d", sizeof ( '3'), sizeof ( "3" ), sizeof ( 3 ) ) ; }
我输出为4 2 4
。
但是,我无法理解我得到此输出的原因。 请解释一下。
-
sizeof ( '3')
,它是字符常量的大小,它是int
所以你的机器上的值为4
。 -
sizeof ( "3" )
,它是字符串的大小,即2
。
字符串"3"
由2个字符组成('3'+'\0')
="3"
。 我们知道sizeof(char)
是1。 -
sizeof ( 3 )
,它的大小为int
,在你的机器上为4
。
首先,几个笔记:
- 你不应该省略main的返回类型。 请参阅C和C ++中main()返回的内容?
- 启用警告。 在GCC上,你通常会使用
-Wall
。 这应该会给你一个关于你的格式字符串的警告。 - 在C99中,您应该使用
%zu
而不是%d
如如何以便携式打印size_t变量中所述? 。 C标准说sizeof
的结果sizeof
是size_t
(§6.5.3.4/ 5)。 如果您的转换说明符与您的参数不匹配,则它是未定义的行为 。
在你的问题上。
- 在comp.lang.c FAQ中 , 问题8.9解释了C中的字符常量是
int
类型,因此sizeof('3')
是sizeof(int)
(在您的机器上看起来是4)。 -
应用于数组时,
sizeof
以字节为单位返回数组的大小。 例如,sizeof(int[10])
在sizeof(int)
为4的机器上返回40.因为sizeof(char)
是1,它将等于字符串文字中的字符数。 正如Jonathan Leffler所解释的那样:-
sizeof(“f”)必须返回2,一个用于’f’,一个用于终止’\ 0’。
-
[…]
字符串文字的类型为’char的大小为N的数组’,其中N包含终止null。
请记住,传递给sizeof时, 数组不会衰减 1指针。
1 数组没有衰减成指针的exception?
-
- 最后,
sizeof(3)
是sizeof(int)
。