当前位置: 代码迷 >> C语言 >> 关于C的问题
  详细解决方案

关于C的问题

热度:200   发布时间:2005-05-17 12:27:00.0
关于C的问题

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

只有三排。。。。。。。。。。。。。


----------------解决方案--------------------------------------------------------
以下是引用指向指针的指针在2005-5-17 12:59:19的发言:

怪哉。。。。。。俺这里只有

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()函数的参数问题是经常捆饶大家的一个难题。
在这里,奉劝新手一句,放弃吧~~这涉及到些汇编方面的知识。

----------------解决方案--------------------------------------------------------

  相关解决方案