首页 > 试题广场 >

知识点:CC++ 110(单选) What is the

[单选题]
下面代码的输出为()
#define MAX(a, b) ((a) > (b) ? a : b )
int main() {
    int a = 5, b = 0;
    int c = MAX(++a, b);
    int d = MAX(++a, b + 10);
    printf("%d %d %d %d\n", a, b, c, d);
    return 0;
}

  • 5 0 5 6
  • 7 0 7 10
  • 8 0 7 10
  • 7 0 5 10
注意define,第一次调用MAX时,++a先执行了一次,此时a为6,由于满足宏定义中(a)>(b)的条件,所以执行a,这个a就对应++a,所以a又自增了一次,变为7,由此得出c为7。 第二个MAX时a又自增了一次,此时为8,由于不满足条件,所以执行的是宏定义中的b,没有执行++a,所以a最终为8。 所以答案是8 0 7 10
发表于 2019-08-28 23:17:22 回复(4)
(++a) > b ? (++a) : b
++a先自增后赋值

编辑于 2018-12-19 21:25:24 回复(1)
C,++a是先自增再赋值,第一个MAX,a自增了两次
发表于 2019-01-04 11:26:52 回复(0)
把(++a)看作一个整体,这个题目就会做对了😂
发表于 2021-02-27 19:21:31 回复(0)
a=7 b=0 c=6 d=10
发表于 2019-03-26 16:11:14 回复(0)
阴人是吧😡
发表于 2023-08-09 09:30:38 回复(0)
记住,这个是宏展开,不能当单纯的函数使用。做了展开就清楚了
发表于 2020-08-09 17:02:05 回复(0)
d = ((++a)>(b+10)?++a:b+10) 还是 d = ((++a)>(b+10)?++a:(b+10)) 结果好像一样 哈哈哈
发表于 2022-05-03 09:48:00 回复(0)
答案不是b吗?
发表于 2018-12-29 00:48:38 回复(2)

a++和++a有些不同

相同点:都是自增运算符

不同点:

a++:先把a+1,然后do something

++a:先do somesthing,再把a+1

所以答案是C

不信MAX函数自己带进去

或者copy到dev_cpp里

发表于 2018-12-27 20:45:26 回复(1)
(++a) > b ? (++a) : b ++a先自增后赋值
发表于 2023-09-16 00:30:32 回复(0)
选了7 0 7 10这个的额这道题是看懂了,但是忘记了后面的b。。。。。也就是粗心额
发表于 2022-09-03 06:24:09 回复(0)
靠 睁眼瞎 明明就是前置加加
发表于 2022-04-17 21:31:32 回复(0)