【问题标题】:Concept of ternary operator (? : ) in c [duplicate]c中三元运算符(?:)的概念[重复]
【发布时间】:2012-08-15 01:44:20
【问题描述】:

关于在 GCC 编译器 中编译给定程序:

int main()  
{  
      int a=2,b=3;  
      (a>1)?b=10:b=50;  
      printf("%d",b);  
      return 0;     
}


它显示错误 “左操作数需要左值”
但如果我将第 4 行写为

(a>1)?b=10:(b=50);

然后它显示没有编译错误。谁能解释我为什么?
还有它与 if...else... 有何不同?

【问题讨论】:

  • 被解析为:((a>1)?b=10:b) = 50;

标签: c ternary-operator


【解决方案1】:

正如 cmets 中所述,您遇到了运算符优先级的问题。您的代码解释如下:

((a > 1) ? b = 10 : b) = 50;

上述代码无效,原因与写(b = 10) = 50无效的原因相同。

代码可以更清楚地写成:

b = a > 1 ? 10 : 50;

还有它与 if...else... 有何不同?

条件运算符仅适用于 表达式 作为操作数。 if 语句可以在正文中包含语句

条件运算符始终可以替换为等效的if 语句。但反之则不然——有些 if 语句不能用等效的条件运算符表达式替换。

【讨论】:

    【解决方案2】:

    您遇到的问题是运算符优先级。 = 运算符的优先级低于 ?: 运算符。

    【讨论】:

    • 您的意思是“= 运算符的优先级低于 ?:”。因为首先 ?: 被执行,然后是赋值。
    【解决方案3】:

    我认为你的代码应该是:

    int main()  
    {  
          int a=2,b=3; 
    
          b=(a>1)?10:50; 
    
          printf("%d",b);  
          return 0;     
    }
    

    干杯。

    【讨论】:

    • **b 看起来像一个二阶指针
    • 对不起,我没有注意其他错误。它实际上应该是现在的样子,对不起**,我以为他们会变成粗体内部字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2013-08-13
    • 2012-07-23
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多