三目運算子之「? 」間省略運算元

2021-08-09 09:22:55 字數 711 閱讀 6257

最近在看gpio驅動框架中關於label屬性的show方法函式時遇到了三目運算子「?:」省略運算元的情況,因為不多見在此記錄下,不多說直接貼**:

static ssize_t chip_label_show(struct device *dev,

struct device_attribute *attr, char *buf)

可以看到在上面 chip->label ? : 「」,猜想x?:y是x?x:y的縮寫,經過測試後發現確實是這樣。

形如 a > b ?: b 中間省略了什麼呢,是a嗎?驗證之後發現並不是a其實省略了 a > b,也就是說 a > b ?: b 等價於 a > b ? a > b : b,那麼可以這樣下結論:「?:」 中間省略的東東是與 「?」之前的數或者表示式完全一致。

值得注意的是:在某種情況下,還是會有出入的

譬如 y = ++x ? ++x : 3 與 y = ++x ?: 3

輸出的y的結果是不一樣的,這是為什麼呢?

當x的初始值為0時,第一種寫法的輸出y的結果為2 ,而第二種寫法的輸出y的結果為1

說明第一種寫法輸出的是執行了兩次++操作的結果,而第二種寫法只執行了一次++操作,所以當有++或–運算的時候,要根據需要判斷要不要省略,不能貿然省去,從而引起不必要的錯誤。

其實這種省略方式還是挺好的,特別是**長度比較長的時候,可以在滿足要求的前提下簡化**。

三目運算子「 」省略中間運算元

在使用三目運算子的時候,我們經常見到的是 x x y 就是if else的簡寫 如果x為真,就返回x,如果x為假,就返回y。這是最簡單最基本的用法。但是有時候會看到這種用法 x y 與 之間沒有任何運算元,這是什麼用法呢?在通過幾個例項的實驗後,猜測?與 之間省略了x 也就是說x y 就是 x x ...

三目運算子「 」省略中間運算元

在使用三目運算子的時候,我們經常見到的是 x x y 就是if else的簡寫 如果x為真,就返回x,如果x為假,就返回y。這是最簡單最基本的用法。但是有時候會看到這種用法 x y 與 之間沒有任何運算元,這是什麼用法呢?在通過幾個例項的實驗後,猜測?與 之間省略了x 也就是說x y 就是 x x ...

三目運算子

1 概念 根據不同的條件,執行不同的操作 返回不同的值。條件1?值1 或操作1 如果滿足條件 1,就返回值 1或執行操作1 條件2?值2 或操作2 否則,如果滿足條件 2,就返回值 2或執行操作2 總結 表示式 閏年 平年 多種條件 條件 1?值1 條件2?值 值3例子 1 輸入星期四 就輸出 班級...