我需要解释给定代码段的输出

时间:2018-09-25 14:04:23

标签: c++ computer-science

#include<stdio.h>
#define CUBE(X)  (X*X*X)

int main(void) 
{
    int a = 2;
    int result = 0;
    result = CUBE(++a) / (++a);
    printf("\na=%d\nresult=%d", a, result);
    return 0;
}

我了解变量 a 的值如何得出6,但我不明白变量 result 的值如何得出13。

1 个答案:

答案 0 :(得分:1)

编译器将单词CUBE替换为(X * X * X)。因此,代码将变成

result = (++a * ++a * ++a) / (++a);
//you might think result = (3 * 4 * 5) / 6;

看起来结果应该是10,但是在乘法之前应用了预递增。因此它的评估方式类似于

result = (((++a) * (++a)) * ++a) / (++a);
//a is incremented to 3 and then four, before the first multiplication

result = ((4 * 4) * 5) / 6;

结果= 13.3333