C 为什么在使用赋值运算符时,如果else部分中有else,则速记中需要左值? #包括 void main() { int k=8; int m=7; intz=k
输出C 为什么在使用赋值运算符时,如果else部分中有else,则速记中需要左值? #包括 void main() { int k=8; int m=7; intz=k,c,shorthand-if,C,Shorthand If,输出 #include <stdio.h> void main() { int k = 8; int m = 7; int z = k < m ? k = m : m++; printf("%d", z); k = 8; m = 7; z = k < m ? m++ : k=m; printf("%d", z);
#include <stdio.h>
void main()
{
int k = 8;
int m = 7;
int z = k < m ? k = m : m++;
printf("%d", z);
k = 8;
m = 7;
z = k < m ? m++ : k=m;
printf("%d", z);
}
编译错误:
main.c:在函数“main”中:
main.c:19:32:错误:赋值的左操作数需要左值
z=k
- 为什么第一个作业有效而第二个作业无效
- 为什么编译器告诉我们需要左值
的原因:
条件运算符与=
Compile Error:
main.c: In function 'main':
main.c:19:32: error: lvalue required as left operand of assignment
z = k < m ? m++ : k=m;
^
z=k
相当于(或者说解析为):
z=((k
m
被分配给一个为-error的表达式
由于?:
条件运算符与=
Compile Error:
main.c: In function 'main':
main.c:19:32: error: lvalue required as left operand of assignment
z = k < m ? m++ : k=m;
^
z=k
相当于(或者说解析为):
z=((k
m
被分配给一个为-error的表达式
阅读也许你应该先问“什么是左值”!!为什么要问?只是谷歌而已…Stackoverflow不允许我发布这个问题,它说我的问题主要是代码,所以我写了这个问题,也许你应该先问“什么是左值”!!为什么要问?只是谷歌而已…Stackoverflow不允许我发布这个问题,它说我的问题主要是代码,所以我写了这个问题
z = ((k < m ? m++ : k) = m);
// ^^^^^^^^^^^^^^^^
// expression = m