#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。
答案 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