我是c编程的新手,我正在尝试理解sizeof
函数。
请帮助我了解此计划的运作方式:
#include<stdio.h>
main( )
{
printf ( "\n%d %d %d", sizeof ( '3'), sizeof ( "3" ), sizeof ( 3 ) ) ;
}
我的输出为4 2 4
。
但是,我无法理解我得到此输出的原因。 请解释一下。
答案 0 :(得分:8)
sizeof ( '3')
,字符常量的大小为int
,因此您的计算机上的值为4
。
sizeof ( "3" )
,字符串大小为2
。
字符串"3"
由2个字符('3'+'\0')
= "3"
组成。我们知道sizeof(char)
是1。
sizeof ( 3 )
,您的计算机上的int
大小为4
。
答案 1 :(得分:8)
首先,请注意几点:
-Wall
。这应该会给你一个关于你的格式字符串的警告。%zu
代替%d
,如How to print size_t variable portably?中所述。 C标准表示sizeof
的结果类型为size_t
(§6.5.3.4/ 5)。如果您的转换说明符与您的参数不匹配,则为undefined behavior。在您的问题上。
int
类型,因此sizeof('3')
是
sizeof(int)
(您的计算机上似乎是4。)应用于数组时,sizeof
将返回数组的大小
字节。例如,sizeof(int[10])
在机器上返回40
sizeof(int)
是4.因为sizeof(char)
是1,所以它将等于
字符串文字中的字符数。正如Jonathan
Leffler所述:
sizeof(“f”)必须返回2,一个用于'f',一个用于终止'\ 0'。
- 醇>
[...]
字符串文字的类型为'大小为N的数组',其中N为N. 包括终端null。
请记住,arrays do not decay 1 传递给sizeof的指针。
sizeof(3)
是sizeof(int)
。