#include <stdio.h>
#define max(x,y)(x)>(y)?x:y
int main() {
int i = 10;
int j = 5;
int k = 0;
k == max(i++, ++j);
printf("%d%d%d ", i, j, k);
return 0;
}
我知道答案。它是 11 7 0
但如何呢?请帮助我执行三元运算符。
最佳答案
声明
k==max(i++,++j);
扩展为
k==(i++)>(j++)?i++:j++;
注意 ==
有更高的 precedence比 ?:
运算符,因此上面的表达式等同于
( k == ((i++)>(j++)) )?i++:j++;
由于 (i++)>(j++)
将为 true
,因此 k == ((i++)>(j++))
为评估为 false
,因此 j++
(其值变为 7
)将被评估(i++
将被跳过) .
注意:上面的表达式不会调用未定义的行为,因为存在 sequence point在评估三元运算符的第一个操作数和第二个或第三个操作数之间。例如,表达式
a = (*p++) ? (*p++) : 0
具有明确定义的行为。
关于c - 三元运算符的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44874453/