c=SUB(a+b++,b)
相当于 c=a+b++ * b
=3+4*4 b的初始值为4但b++以后b应该变成5才对呀,为什么b的值还是没变
=19
#define SUB(X,Y) X*Y main() { int a=3 ,b=4,c; c=SUB(a+b++,b); printf("%d\n",c); } 输出结果是多少?
答案:1 悬赏:40 手机版
解决时间 2021-03-14 17:39
- 提问者网友:城市野鹿
- 2021-03-13 17:30
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-03-13 17:55
我只是个C语言新手,回答的原因想交流一下心得,所以答案可能不正确,还请见谅。
以下为我测试用的源代码:
#include <stdio.h>
#include <stdlib.h>
#define SUB(X,Y) X*Y
int main(int argc, char *argv[])
{
int a=3, b=4;
printf("%d\n",SUB(a+b++,b));
printf("%d\n",b);
a=3, b=4;
printf("%d\n",SUB(a+(++b),b));
printf("%d\n",b);
a=3, b=4;
printf("%d\n",SUB(a+(b++),b));
printf("%d\n",b);
system("pause");
return 0;
}
SUB(a+b++,b)==19是因为a+b++中,b++是使b先参与其它运算,再使b的值+1。
1)3+4*4==3+16==19
2)b=b+1==4+1==5
SUB(a+(++b),b))==28是因为a+(++b)中(这里用(++b)是因为a+++b==a+b,与我想要的a加++b不同,括号并不是用来影响运算次序),++b是使b的值+1,再使b先参与其它运算。
1)b=b+1==4+1==5
2)3+5*5==3+25==28
SUB(a+(b++),b))==19证实了SUB(a+(++b),b))中括号并不能影响运算次序(小知识:自增运算符++的优先级比+高)。
1)3+4*4==3+16==19
2)b=b+1==4+1==5
希望能解决你的疑惑。
以下为我测试用的源代码:
#include <stdio.h>
#include <stdlib.h>
#define SUB(X,Y) X*Y
int main(int argc, char *argv[])
{
int a=3, b=4;
printf("%d\n",SUB(a+b++,b));
printf("%d\n",b);
a=3, b=4;
printf("%d\n",SUB(a+(++b),b));
printf("%d\n",b);
a=3, b=4;
printf("%d\n",SUB(a+(b++),b));
printf("%d\n",b);
system("pause");
return 0;
}
SUB(a+b++,b)==19是因为a+b++中,b++是使b先参与其它运算,再使b的值+1。
1)3+4*4==3+16==19
2)b=b+1==4+1==5
SUB(a+(++b),b))==28是因为a+(++b)中(这里用(++b)是因为a+++b==a+b,与我想要的a加++b不同,括号并不是用来影响运算次序),++b是使b的值+1,再使b先参与其它运算。
1)b=b+1==4+1==5
2)3+5*5==3+25==28
SUB(a+(b++),b))==19证实了SUB(a+(++b),b))中括号并不能影响运算次序(小知识:自增运算符++的优先级比+高)。
1)3+4*4==3+16==19
2)b=b+1==4+1==5
希望能解决你的疑惑。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯