INT I;
I=8;
printf("%d\n%d\n%d\n%\n",++I,--I,I--,I++);
为什么显示的是 8 7 7 8而不是 9 8 8 9呢
----------------解决方案--------------------------------------------------------
这个问题........
我一时间也弄不清楚呀~
----------------解决方案--------------------------------------------------------
楼主所写的 printf 函数显示的结果应该是
8
7
9
8
这是C函数参数传递的方式使然。
Turob C默认的参数传递方式是 cdecl,
那是从右到左历遍参数的,
所以 “printf("%d\n%d\n%d\n%\n",++I,--I,I--,I++);” 中,
先计算的是最后一个参数的值,I++,这是8,使 I 加一,I 变成 9;
到倒数第二个时,那就是 “9--”,所以倒数第二个会打印 9;
按此类推,
结果便是前面所说的:
8
7
9
8
[此贴子已经被作者于2005-5-17 13:11:41编辑过]
----------------解决方案--------------------------------------------------------
这个问题太难了 放弃吧
----------------解决方案--------------------------------------------------------
怪哉。。。。。。俺这里只有
8 7 8
只有三排。。。。。。。。。。。。。
----------------解决方案--------------------------------------------------------
怪哉。。。。。。俺这里只有
8 7 8
只有三排。。。。。。。。。。。。。
留意到么?
楼主的 printf 函数少了一个说明符号:
printf("%d\n%d\n%d\n%\n",++I,--I,I--,I++);
只有三个 “%d”。
----------------解决方案--------------------------------------------------------
这个问题说过多少次了,就是不看谭浩强的书的原因.真不知道是怎么学C的,难道现在都不看谭浩强了?这个问题谭浩强在<C程序设计>一开始就说的明白:
printf("格式",a,b.c);
程序计算的顺序是: c,b,a,所以肯定打出8798
而且谭浩强还说明,有的编译器的顺序则是
abc,不过我还没见过.
----------------解决方案--------------------------------------------------------
3楼说得好详细噢。
----------------解决方案--------------------------------------------------------
int i
i=8;
printf("%d\n%d\n%d\n%d\n", ++i, --i,i-- ,i++);
为什么显示的是
8
7
7
8
而不是
9
8
8
9
呢前面不好意思我在提问时少打了一个d所以你才只有三行。
----------------解决方案--------------------------------------------------------
恩,看见ChenMo楼说的_cdecl我才想起来,的确是这样的。
printf()是一个很特殊的函数,它和scanf()函数一样,具有一般函数没有的东西------变参数(就是说参数的数量可以变化)
所以,printf()、scanf()函数的参数问题是经常捆饶大家的一个难题。
在这里,奉劝新手一句,放弃吧~~这涉及到些汇编方面的知识。
----------------解决方案--------------------------------------------------------