| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 951 人关注过本帖
标题:关于C的问题
只看楼主 加入收藏
klklk
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-4-6
收藏
 问题点数:0 回复次数:11 
关于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呢

2005-05-17 12:27
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
这个问题........
我一时间也弄不清楚呀~

淘宝杜琨
2005-05-17 12:46
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
楼主所写的 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编辑过]



欢迎加入 MVC 技术讨论群(新群:90093426)
2005-05-17 12:55
Rank: 1
等 级:新手上路
帖 子:255
专家分:0
注 册:2005-4-25
收藏
得分:0 
这个问题太难了 放弃吧

/bbs/showimg.asp?BoardID=5&filename=2005-4/2005427111228529.jpg" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://bbs./bbs/showimg.asp?BoardID=5&filename=2005-4/2005427111228529.jpg');}" onmousewheel="return imgzoom(this);" alt="" /> 欢迎加入C语言QQ群698156 我们都是菜鸟乃至新手 坚信有一天定能展翅高飞 因为有着努力的决心 衷心盼望你的到来 让我们一起进步
2005-05-17 12:56
指向指针的指针
Rank: 1
等 级:新手上路
帖 子:339
专家分:0
注 册:2004-8-8
收藏
得分:0 

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

8 7 8

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


/sign.png" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www./sign.png');}" onmousewheel="return imgzoom(this);" alt="" />
2005-05-17 12:59
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
以下是引用指向指针的指针在2005-5-17 12:59:19的发言:

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

8 7 8

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

留意到么? 楼主的 printf 函数少了一个说明符号: printf("%d\n%d\n%d\n%\n",++I,--I,I--,I++); 只有三个 “%d”。


欢迎加入 MVC 技术讨论群(新群:90093426)
2005-05-17 13:07
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
得分:0 
这个问题说过多少次了,就是不看谭浩强的书的原因.真不知道是怎么学C的,难道现在都不看谭浩强了?这个问题谭浩强在<C程序设计>一开始就说的明白:
printf("格式",a,b.c);
程序计算的顺序是: c,b,a,所以肯定打出8798


而且谭浩强还说明,有的编译器的顺序则是
abc,不过我还没见过.

myQQ::445750010
2005-05-17 13:08
yang_sxin
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-5-17
收藏
得分:0 
3楼说得好详细噢。

2005-05-17 13:41
klklk
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-4-6
收藏
得分:0 
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所以你才只有三行。
2005-05-17 14:17
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
恩,看见ChenMo楼说的_cdecl我才想起来,的确是这样的。

printf()是一个很特殊的函数,它和scanf()函数一样,具有一般函数没有的东西------变参数(就是说参数的数量可以变化)

所以,printf()、scanf()函数的参数问题是经常捆饶大家的一个难题。
在这里,奉劝新手一句,放弃吧~~这涉及到些汇编方面的知识。

淘宝杜琨
2005-05-17 14:42
快速回复:关于C的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030053 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved