tempnetbar 说得很对,问题就出在 printf("x=%d\na=%d\nb=%d\nc=%d\nd=%d\n"); 正因为是你在printf中把x定为d型的缘故
我们先来看看int和double在内存中所占的字节各是多少
int 2字节 double 8字节
你把x=%d放在printf()函数的实参的首位,那么printf()将会把这些数据重新在内存中排列并且按照事先约定好的字节数读取。
这个是系统实际的内存排列 double
x=97.6875 {[]-[]-[]-[]-[]-[]-[]-[]}
int
a=1, b=1, c=1, d=1; {[]-[]-[]-[]}--{[]-[]-[]-[]}--{[]-[]-[]-[]}--{[]-[]-[]-[]}
(每个[]表示内存中1个字节)
这个是你在printf()函数中实际的排列 printf("x=%d\na=%d\nb=%d\nc=%d\nd=%d\n",x,a,b,c,d);
x=%d a=%d b=%d c=%d d=%d
{[]-[]-[]-[]}--{[]-[]-[]-[]}--{[]-[]-[]-[]}--{[]-[]-[]-[]}--{[]-[]-[]-[]}--[]-[]-[]-[]
你可以看到你的数据已经乱了套了(后面还多出4个字节哪),所以你的结果当然会变啦!
如果你把x放在参数表的末尾 即 printf("a=%d\nb=%d\nc=%d\nd=%d\nx=%d\n",a,b,c,d,x);
这样出错的就不是全部的数据了,只有x出了错,因为x本来是8个字节的,而printf()在你的参数下只读了4个,这个就是问题的关键所在。
[此贴子已经被作者于2004-07-22 19:48:03编辑过]
淘宝杜琨