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=11*1 = 1i++=2再i++=3
第二循环
首先3*3 = 9i++=4再i++=5
第三循环
首先5*5 = 25i++=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

提交
取消