c中赋值语句的条件表达式行为

Dha*_*tri 2 c

在下面的第一个程序中没有错误.但是对于第二个程序存在错误.为什么会这样?

第一个项目:

#include<stdio.h>
void main()
{
int k=8;
int m=7;
k<m?k=k+1:m+1;
printf("%d",k);
}
Run Code Online (Sandbox Code Playgroud)

第二个方案:

#include<stdio.h>
void main()
{
int k=8;
int m=7;
k<m?k=k+1:m=m+1;
printf("%d",k);
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 5

条件运算符的优先级高于赋值运算符.您需要额外的括号才能获得所需的优先级.

k < m? k = k + 1 : m = m + 1;
Run Code Online (Sandbox Code Playgroud)

被评估为

((k < m) ? (k = k + 1) : m) = m + 1;
Run Code Online (Sandbox Code Playgroud)

添加括号以获得正确的优先级:

(k < m) ? (k = k + 1) : (m = m + 1);
Run Code Online (Sandbox Code Playgroud)