簡體   English   中英

運算符優先級和三元運算符

[英]Operator precedence and ternary operator

我在C有問題。

#include<stdio.h>
int main()
{
    int a = 10, b = 0, c = 7;
    if (a ? b : c == 0)
        printf("1");
    else if (c = c || a && b)
        printf("2");
    return 0;
}

此代碼打印 2,但我認為 a?b:c 返回 b=0,0==0 返回 1。您能解釋一下代碼嗎?

條件運算符 ( ?: ) 具有最低的優先級之一。 特別是它低於== 你的陳述是這樣的:

if(a ? b : (c == 0)) { ... }

不是這個:

if((a ? b : c) == 0) { ... }

你的條件沒有寫好。

在第一個 if 語句中:

  if (a ? b : c == 0)

如果你輸入值,那么它就變成了

if(10 ? 0 : 7 == 0)

意味着,它將始終返回 0。

這就是為什么控制轉到 else 部分,在那里,它變成了

else if (7 = 7 || 10 && 0)

由於您在此處使用了“=”運算符 (c = c),因此它將始終為真,因此它會打印“2”。

現在您希望該代碼返回“1”,然后以這種方式更改您的 if 語句。

 if( (a ? b:c) == 0){...}

因為“==”運算符的優先級高於三元運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM