我读了一本关于 C 的书,我最好先呈现代码并在后者中提问。
第一个密码
#include <stdio.h>
int main(void)
{
short num = 3;
printf("%hd\n" , num );
return 0;
}
第二代码
#include <stdio.h>
int main(void)
{
short num = 3;
printf("%d\n" , num );
return 0;
}
特别说明:我使用的是基于英特尔的电脑,所以 int 大小是 32 位的。
问题 :
1.)书中提到这两个代码可以正确运行,尽管其中一个使用说明%hd
符而另一个使用%d
说明符。
2.)书中的原因是因为C机制会自动将类型转换为int以加快计算速度,这就是为什么使用说明%d
符甚至%ld
是32位也会产生正确的结果。
3.)我的问题是,这种转换是什么时候发生的?是在我们将它作为参数传递给printf()
函数的时候吗,就像浮点变量作为表达式或参数传递时如何转换为双精度一样,或者当我们用一个值初始化变量时3
?
4.)实际上我做了一个小实验,即使用sizeof
运算符和printf()
函数打印出变量 num 的大小,它显示给我2 bytes
。但我仍然不确定转换何时发生。
5.)如果转换发生在我们为short变量赋值的时候,那么创建一个short变量有什么意义??(**如果不是这种情况,这个问题应该忽略)
非常感谢您的帮助