这是一道笔试题,问的是输出结果是什么?:
#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.
阅读(1086) | 评论(0) | 转发(1) |