条件运算符需要什么?在功能上它是多余的,因为它实现了if-else结构.如果条件运算符比等效的if-else赋值更有效,为什么编译器不能更有效地解释if-else?
我有 :
#include<stdio.h>
int main()
{
int a=5,b=6;
(a>b)?b=a:b=b; // Here is the error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但如果我更换:
(a>b)?b=a:b=b; // Error
with
(a>b)?(b=a):(b=b); // No-Error
Run Code Online (Sandbox Code Playgroud)
我理解这lvalue是一个可以分配某些东西的价值,它与它有什么不同rvalue,但为什么会extra parenthesis产生不同.
C和C++之间存在很多差异,并且卡在其中一个上相同的代码在C中产生错误而在C++中执行正常请解释原因
int main(void)
{
int a=10,b;
a>=5?b=100:b=200;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在C中给出了一个错误,说明了所需的左值,而相同的代码在C++中编译得很好
(k < m ? k++ : m = k)
此特定表达式给出了编译时错误,表示需要左值.问题在于k++.无法理解此表达式中的错误.
在编译下面的代码时,我收到错误“需要左值作为赋值的左操作数”
for (i = 1; i < 2 n; i++) {
for (((i<= n)?j=1:j=n-i);j<=i&&j>0;((i<=n)?j++:j--)) {
printf("*");
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
实际上我试图仅使用两个 for 循环来打印下面的图案
*
**
***
****
*****
****
***
**
*
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
pra.c:5:20: error: lvalue required as left operand of assignment
for(((i<=5)?j=1:j=i);j<=i&&j>0;((i<=5)?j++:j--)){
^
有人可以帮助我吗?