菜鸟请教一道C语言题

#define SUB(X,Y) X-Y
main()
{int a=3,b=4; printf("%d\n", SUB(a+=2,b++));}
这道题的思维过程是怎样的?谢谢

楼主您好,说下我的解题思路,首先,这是一道函数调用的题,先从main()函数读起,定义了整形变量a=3,b=4,下面是输出语句,输出的是一个函数,所以跳到最开始的#define ,将实参的值传递给形参,即X替换成a+=2,这时a=5,Y替换成b++,然后X-Y,先把这个式子完整的写出来,就是 5-b++,要注意自增自减变量的执行规则,b++是先使用,后加1,所以先用5-4,然后b 的值再加一,所以执行完之后,输出的值是1,这时候b的值为2了,但是结果与b无关,只输出1了。。楼主明白了吗?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-25
首先你要明白的是你这个题中有宏,而最后一句的是可以去当作两句去写的,把sub中的两个表达式当作两个变量就好去理解了,这一点要有整体思想的,最后a为5,b为5,但是b的加加是在后面的,所以在计算宏的时候b还是为4的,最后的结果就1
第2个回答  2012-04-25
宏定义是直接的替换,对于这题来说
SUB(a+=2,b++)
预编译的时候会替换成
a+=2-b++
所以结果是1追问

b后面++运算符不用计算了呗

第3个回答  2012-04-25
两个参数是 a = a+2,变为5, b = 4 执行函数后,打印出 1 , 此时b = 5(后缀++先运算后自增);
第4个回答  2012-04-25
X=a=a+2=5;Y=b++=4;
X-Y=1;追问

先把b的值赋给Y,那++运算符这道题就不用运算了呗

追答

X,Y是形参,不是赋值,我是为了说明方便。a+=2相当于X,b++相当于Y
b现在是5,先使用b,后++;如果是++b,则打印出来是0
多看两遍书,做做题就知道了,很简单

本回答被提问者采纳
相似回答
大家正在搜