Abh*_*ngh 0 c macros ternary operator-keyword
#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;
}
Run Code Online (Sandbox Code Playgroud)
我知道答案.这是11 7 0怎么回事?请帮我执行三元运算符.
该声明
k==max(i++,++j);
Run Code Online (Sandbox Code Playgroud)
扩大到
k==(i++)>(j++)?i++:j++;
Run Code Online (Sandbox Code Playgroud)
请注意,==具有较高的优先级比?:操作者,因此上述表达式是等效于
( k == ((i++)>(j++)) )?i++:j++;
Run Code Online (Sandbox Code Playgroud)
由于(i++)>(j++)将true,因此k == ((i++)>(j++))被评价为false,因此j++(和它的值成为7)将被评估(i++将被跳过).
注意:上述表达式不会调用未定义的行为,因为在三元运算符的第一个操作数和第二个或第三个操作数的求值之间存在序列点.例如,表达式
a = (*p++) ? (*p++) : 0
Run Code Online (Sandbox Code Playgroud)
有明确的行为.
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |