C语言的代参宏定义,#define SQ(y) ((y)*(y))....输出应该是2 12 30才对啊?? 5

#define SQ(y) ((y)*(y))
#include <stdio.h>
int main()
{
int i=1;
while(i<=5)
printf("%d\n",SQ(i++)); ///////////输出为什么不是 2 12 30 ??????
return 0;
}
///////////////
1
9
25
Press any key to continue
我有更好的答案
2015-05-25 最佳答案
首先i++是先运算,后加。
对于SQ(i++)来说,其实质是((i++)*(i++))。在后加运算符是在整个运算完成之后,才进行加1操作的。
因此,第一次
首先i=1,1*1 = 1,之后i++=2,再i++=3。
第二次循环
首先3*3 = 9,之后i++=4,再i++=5。
第三次循环
首先5*5 = 25,之后i++=6,再i++=7。
因为i=7,所以退出循环。
追问
"因此,第一次
首先i=1,1*1 = 1,之后i++=2,再i++=3。",第一个i++ = 1,第二个i++等于2,那么(i++)*(i++)=2才对啊?
追答
后加运算符是在整条语句执行完之后,再进行计算的。
所以,会执行完乘法后,再执行两次加法。

其他回答

未定义行为,结果视编译器而定
追问
我如何定义行为才能使”
输出应该是2 12 30“
呢?~求指点啊~~
热心网友| 发布于2015-05-25
评论

为您推荐:

×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消