#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;
}
为什么输出在这里不同?我得到的此代码的输出是844441为什么这样?谁能解释
常量,像变量一样,有自己的类型:
6.5
:类型为double
的浮点常量90000
:类型为int
(如果int
为32位)或long
(如果int
为16位)的整数常数]'A'
:C中为int
类型,C ++中为char
类型的字符常量打印的尺寸是上述类型的尺寸。
此外,sizeof
运算符的结果具有类型size_t
。因此,在打印时,要使用的正确格式说明符是%zu
,而不是%d
。
C中的字符常量(与C ++相反)具有类型int
。所以这个电话
printf("%d",sizeof('A'));
输出4。即sizeof( 'A' )
等于sizeof( int )
。
从C标准(6.4.4.4字符常量)
10 一个整数字符常量的类型为int ....
另一方面(6.5.3.4 sizeof和alignof运算符)
4当将sizeof应用于具有char类型,无符号的操作数时字符或带符号的字符(或其限定版本),结果为1。
因此,在此表达式sizeof
中,sizeof( 'A' )
运算符的操作数的类型为int,而在此表达式sizeof( a )
中,a的声明如下:>
char a = 'A';
操作数的类型为
char
。
请注意这样的呼叫
printf("%d",sizeof(6.5));
使用错误的转换格式说明符。你必须写
printf("%zu",sizeof(6.5));
也在上述调用中,在此调用中使用了类型为
double
的常量
printf("%zu",sizeof(c));
变量
c
具有类型float
。
如果第一个调用使用了float类型的常量,则这些调用会得到相同的结果
printf("%zu",sizeof(6.5f));