Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么在使用赋值运算符时,如果else部分中有else,则速记中需要左值? #包括 void main() { int k=8; int m=7; intz=k_C_Shorthand If - Fatal编程技术网

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