满意答案
如果用%d,得到的数为1546188226
下面我们通过实验来剖析为什么得到的是这个数,而不是8
(1)在加入一行代码并设置断点如下:
int a = 7.1;
double b = 1.88;
double c = a + b;//加此行代码(注:因int+double自动转double,故c用double)
printf("%d",a+b);//在此行按F9设置断点
(2)F5运行程序,将停在printf行,打开watch变量查看窗口(如果你用的是vc6.0,在菜单view(视图)→debug windows(调试窗口)→Watch(查看)打开)。输入c,然后加个取地址符成 &c。这时候可以看到c变量的地址
(3)打开内存查看窗口(VC6.0打开位置同上面的查看窗口,快捷键Alt+6),由于c double型是4个字节长度,所以在内存查看窗口内右键选第三项long Hex Format。然后把(2)中看到的c变量的地址输入到内存查看窗口上,回车,这时可以看到c地址所对应的内存中的数据值为5C28F5C2,这是个十六进制的值,用计算器将其转换为十进制发现,这个值就是之前提到的1546188226
分析总结:这是因为对于编译器来说,它并不知道整形、浮点型的区别,它只认内存中的数据,并根据你的参数要求也可以说是规则(%d还是%f)去处理显示内存中对应地址上的数据。
所以说,1546188226和8.88只不过是5C28F5C2不同的表达方式,就像同一个词在不同的场合有不同的意思一样,需要给它个合适的环境它才能做出正确的表达
00分享举报