20分。问一道C语言的题。

来源:百度知道 编辑:UC知道 时间:2024/05/04 11:12:26
#define POWER(x)((x)*(x))
main()
{int i=1;
printf("%d%d",POWER(i++),i);
}
结果是什么?为什么第二个“i”不是2?

我运行过,答案是2.1吧;你试下下面这个:
#define POWER(x)((x)*(x))
main()
{int i=1;
printf("%d%d",POWER(i++),i);
printf("%d",i);
}
看到什么?
21
3
1是因为++运算符的关系,它的运算顺序是从左到右的,所以POWER(i++)给了第二个%d,而i给了第一个%d. 因为经过了i++,所以i就变成2给了第一个%d.
2.系统会先通过POWER(),编译后(这是关键),i就加1了,所一实际运行时 i已经变成2了,而POWER()的结果是1,so..
3.系统编译后的程序:
main()
{int i=1;
printf("%d%d",(i++)*(i++),i);
printf("%d",i);
}

1,4

POWER(x) ((x)*(x))
POWER(i++) ((i++)*(i++)) //这里的i++ 算了两边
所以结果应该是:2(1*2=2),3