4

我想找出 (short / int / long / float / double / long double / char) 的大小,所以我写了这段代码:

printf("short\t\t%d\n", sizeof(short));    
printf("int\t\t%d\n", sizeof(int));
printf("long\t\t%d\n", sizeof(long));
printf("float\t\t%d\n", sizeof(float));
printf("double\t\t%d\n", sizeof(double));  
printf("long double\t%d\n", sizeof(long double));    
printf("char\t\t%d\n", sizeof(char));   

但输出是:

type            bytes
short           512
int             512
long            1024
float           1024
double          1024
long double     1024
char            256

为什么字节数这么大?

不应该是2、8、...吗?

4

2 回答 2

7

sizeof评估为 a size_t,而不是 a int。所以%d不合适;您正在调用未定义的行为。

要正确打印类型的数据size_t,我建议例如printf("%zu\n", sizeof(float));等。

于 2013-09-20T12:54:47.263 回答
-1

使用:格式说明符 long unsigned int。它会正常工作。例如: printf("sizeof(long double)= % lu \n", sizeof(long double));

答:16

于 2017-10-13T19:35:13.883 回答