Chinaunix首页 | 论坛 | 博客
  • 博客访问: 866338
  • 博文数量: 156
  • 博客积分: 6553
  • 博客等级: 准将
  • 技术积分: 3965
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 18:36
文章存档

2012年(3)

2011年(43)

2010年(110)

分类: C/C++

2010-11-25 15:10:35

这是一道笔试题,问的是输出结果是什么?:
#include
#define pro(x) (x*x)
int  main()
{
 int x = 3, k, j;
 j = pro(x++);
 k = pro(++x);
 printf("j = %d, k = %d, x = %d\n", j, k, x);
 return 0;
}
 
答案是:9 49 7
可能有些朋友对于49这个结果有些意外,但确实就是,不信你可以在gcc或者vc++下编译看看。
下面我们来分析下原理:
整个表达式的运算过程是:
1、进行所有的前缀单目运算
2、取所有单目运算对象的当前值作为表达式的计算结果
3、进行所有的后缀单目运算
依据第1点,我们知道,在运算pro(++x),程序是先运行了两次++x后再从X的地址上取出X值来进行x*x运算,所以得到的结果就是49.

阅读(1095) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~