我想要找出(short / int / long / float / double / long double / char)的大小,所以我写了这段代码:
但是输出结果是:
为什么字节数这么大?难道不应该是2、8、...吗?
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、...吗?
sizeof
返回一个size_t
而不是一个int
,因此%d
不适用。 - Oliver Charlesworthsize_t
到int
的隐式转换会乘以256吗?为什么会这样呢? - Dan%d
打印size_t
并不会创建从size_t
到int
的隐式转换。充其量,它将size_t
的字节重新解释为int
。在最坏的情况下,它会破坏堆栈,因为违反了平台 ABI,这可能导致程序进一步出现错误、立即崩溃或其他不希望发生的影响。 - Eric Postpischil