Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329710
  • 博文数量: 67
  • 博客积分: 2485
  • 博客等级: 大尉
  • 技术积分: 665
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 17:29
文章分类

全部博文(67)

文章存档

2016年(3)

2013年(5)

2012年(3)

2011年(5)

2010年(35)

2009年(16)

我的朋友

分类: C/C++

2010-09-02 17:28:26

首先,我们选择的平台是Vc6.0,如果使用vs2005就没必要讨论这个问题了。
例1 、#include
void main()
{
int i=0;
printf("%d %d %d",++i,++i,++i);
}
输出为3 2 1
原因是,如果一个函数有多个参数,比如
int fun (int a, int b, int c);
调用时,总是从最后一个参数开始压栈。 也就是c先进栈,其次是b,最后才是a。因此
先计算最后一个参数(即最右一个++i),压入1,以此类推,再压入2,3和字符串"%d,%d,%d"的首地址。
所以 , 程序的输出是 3,2,1

可是
#include
void main()
{
int i=0;
printf("%d %d %d",i++,i++,i++);
}
的输出?
我用VC结果是0 0 0,而不是是2 1 0
 
例2、
#include
#include
#define F(x) (x+x+x)
main()
{
int i=2;
 printf("%d\t%d",i,F((i++))); 
printf("\t%d\n",i);
}
 
答案:2        6         5
解释:其中f((i++))表示的是i++ + i++ + i++ 因为先求i相加,再i++,因此答案比较好解释,然而下面一题:
 
例3、
#include
#include
#define F(x) (x+x+x)
main()
{
int i=2;
 printf("%d\t%d",i,F((++i))); 
printf("\t%d\n",i);
}
答案:5        13         5
解释:其中f((i++))表示的是++i + ++i + ++i,因为c是从右向左计算机,就表示成了{++i + (++i + ++i)},首先计算机小括号内,最后一个++i表示此时i的值为3,中间再以3为基值,++i 的值就为4,由于i是变量,小括号为表示此时i的值相加4+4为8,再与前面一个++i相加,即5+8=13
注:只是函数,printf从右向左,等式是从左向右,别搞混淆了!
注:此文具有代表性,仔细一下,能让人豁然开朗。
阅读(2290) | 评论(1) | 转发(0) |
0

上一篇:kscope安装使用

下一篇:堆与栈

给主人留下些什么吧!~~

chinaunix网友2010-09-05 14:50:36

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com