#include <stdio.h>
int main() {
char a = 'A';
int b = 90000;
float c = 6.5;
printf("%d ",sizeof(6.5));
printf("%d ",sizeof(90000));
printf("%d ",sizeof('A'));
printf("%d ",sizeof(c));
printf("%d ",sizeof(b));
printf("%d",sizeof(a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
8 4 4 4 4 1
Run Code Online (Sandbox Code Playgroud)
为什么相同值的输出不同?
dbu*_*ush 18
常量和变量一样,也有自己的类型:
6.5
: 类型的浮点常量 double
90000
: 类型的整数常量int
(如果int
是 32 位)或long
(如果int
是 16 位)'A'
: int
C 和char
C++中类型的字符常量打印出来的尺寸是上述类型的尺寸。
此外,sizeof
运算符的结果类型为size_t
。因此,在打印要使用的正确格式说明符时,使用 is %zu
,而不是%d
.
C 中的字符常量(与 C++ 相反)具有类型int
. 所以这个电话
printf("%d",sizeof('A'));
Run Code Online (Sandbox Code Playgroud)
输出 4. 即sizeof( 'A' )
等于sizeof( int )
。
来自 C 标准(6.4.4.4 字符常量)
10整数字符常量的类型为 int ....
另一方面(6.5.3.4 sizeof 和 alignof 运算符)
4 当 sizeof 应用于具有 char、unsigned char 或 signed char 类型(或其限定版本)的操作数时,结果为 1。
所以sizeof
这个表达式中运算符的操作数sizeof( 'A' )
的类型是 int 而在这个表达式sizeof( a )
中 a 被声明为
char a = 'A';
Run Code Online (Sandbox Code Playgroud)
操作数的类型为char
。
注意像这样的调用
printf("%d",sizeof(6.5));
Run Code Online (Sandbox Code Playgroud)
使用不正确的转换格式说明符。你必须写
printf("%zu",sizeof(6.5));
Run Code Online (Sandbox Code Playgroud)
同样在上面的调用中double
,在这个调用中使用了一个类型的常量
printf("%zu",sizeof(c));
Run Code Online (Sandbox Code Playgroud)
变量c
的类型为float
。
如果第一次调用使用 float 类型的常量,则这些调用可以获得相同的结果
printf("%zu",sizeof(6.5f));
Run Code Online (Sandbox Code Playgroud)