請問大佬們 為什么不先算i++啊
++與!運算級相等,不是從右向左結合嗎?
uj5u.com熱心網友回復:
莫非你忘了 ++寫在i后面了?uj5u.com熱心網友回復:
哦,至于這個題目,那是短路效應造成的。uj5u.com熱心網友回復:
請問有&&運算子的話就直接從左到右計算嗎?
uj5u.com熱心網友回復:
寫完這題,我突然就不懂運算的優先級了
uj5u.com熱心網友回復:
運算子的優先級那是討論結合性用的,用在編譯期間。而運算順序,只有 && || ?: , 這四個運算子存在確定的順序,并且前兩個有可能,第三個一定會忽略一部分子運算式的求值。這是運行期概念。
uj5u.com熱心網友回復:
優先級跟運算次序沒有決定性關系,要從小學數學的思維習慣擺脫出來。運算子優先級其實是個小學語文的概念。
應該聽過
下雨天留客天留我不留
這個梗吧?
在恰當的位置加逗號是語文風格
把應該結合在一起的東西括起來是C風格
不用括起來也優先黏糊在一起,這就叫優先級高
這就是為什么int *a[3]是個陣列而int (*a)[3]是個指標,優先級是干這個用的。
uj5u.com熱心網友回復:
謝謝您!我明白了 十分感謝
uj5u.com熱心網友回復:
就你的問題(因為題目沒寫分號,我也不寫)j=!c&&i++
來說,它是
j=( (!c) && (i++) )
的意思,而不是
(j=!c) && (i++) 或者
j=(!c && i)++ 或者別的
這是運算子優先級的作用----注意,我們一直沒有開始算呢,討論的是怎么正確理解那個式子
真的要算結果了,其實優先級分析就退休了。上面第四行告訴我們,
它是個賦值陳述句,先求右側運算式的值,然后送給j ----注意,我們首先關注的是這里面優先級最低的賦值運算子啊
上一行里的“先”“然后”描述的是執行次序,但這是由賦值運算子的語意決定的,和優先級完全沒有關系
然后我們才注意到要被求值的是個邏輯與運算,這是我們馬上反應,左邊若為假,右邊被忽略----這是邏輯與的語意決定的
至此興盡,return to sleep;
uj5u.com熱心網友回復:
printf("thanks +++++");
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269520.html
標籤:C語言
