永发信息网

#define MAN(a,b) a>b?a:b

答案:3  悬赏:70  手机版
解决时间 2021-04-02 10:45
  • 提问者网友:兔牙战士
  • 2021-04-02 05:49
#define MAN(a,b) a>b?a:b
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-04-02 07:00
你这个式子是要先算++a 的
MAN(++a, b) 替换成, ++a>b?++a:b
要先计算两个++a,a就变成4了

比如:这个
#include
int main()
{
int a = 2, b;
b = ++a + ++a;
printf("%d \n", b);
}
先算两个++a,再计算a+a

算出来a = 4,b =8 ,懂了吧?

嘿嘿
全部回答
  • 1楼网友:三千妖杀
  • 2021-04-02 09:24
这个问题相当犀利,这是编译器在堆区的操作,具体过程我也不是很清楚,但是你执行单步调试,如果你的微机原理学得好,看得懂汇编语言,这道题就可以被你解释了。。。
  • 2楼网友:轮獄道
  • 2021-04-02 08:37
因为#define MAN(a,b) a>b?a:b
调用的时候你输入的是MAN(++a,b)预定义的会直接把你的表达式代入,而不是计算完了再代入
++a>b?++a:b
所以会是4而不是3
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯