请看这段代码:
它的输出如下:
在最后一行,为什么
#include <stdio.h>
int main(void)
{
short s = -1;
printf("sizeof(short) = %lu\n", sizeof(short));
printf("sizeof(int) = %lu\n", sizeof(int));
printf("sizeof(long) = %lu\n", sizeof(long));
printf("s = %hd\n", s);
printf("s = %d\n", s);
printf("s = %ld\n", s);
return 0;
}
它的输出如下:
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 8
s = -1
s = -1
s = 4294967295
在最后一行,为什么
s = 4294967295
而不是s = -1
,因为我通过这个问题得知,在C语言中,当变量被提升时,它的值保持不变。
s
只是被晋升为int
,那么为什么最后一种情况没有呢?好吧,在第2种情况下,我提供了一个格式说明符,它期望一个4字节类型,但是问题很快就通过迅速将s
提升为int
来解决了。第三种情况也可以这样做。但是没有。为什么呢? - rootkeaprintf
时,参数都会被提升为int
类型?那么格式说明符在这里起什么作用呢? - rootkea