簡體   English   中英

運算符優先級混淆

[英]Operator precedence Confusion

大家好,在通過href = http://en.cppreference.com/w/c/language/operator_precedence此鏈接之后,我以為我理解了運算符的優先級,但隨后引起了疑問。 該鏈接表示, 在解析表達式時,在某行上列出的某個運算符將比在其下一行上列出的任何運算符更嚴格地(如用括號括起來)綁定到其參數。 例如,表達式* p ++被解析為*(p ++),而不是(* p)++。
那么如何對表達式++ * p進行求值,就像++(* p)一樣,但是如果是,++的優先級或綁定度更高,那么*,那么為什么在上述情況下*綁定得更緊,表達式又如何* ++ p?

運算符優先級定義了多個選擇時應首先應用哪個運算符。

從您的鏈接:

優先權和關聯性與評估順序無關。

表達式++*p任何形式的表達式:

{operator 2} {operator 1} {expression}

具有明確定義的求值順序 ,其中必須應用{operator 1} {expression}才能使{operator 2}可以執行的表達式。

++優先級高於*並且兩者的關聯性是從右到左。

所以

++*p將被評估為++(*p)因為++需要以可修改的值應用。

如您所見, *++p在求值時會看到,與p接近的運算符是++ ,並且比*具有更高的優先級,因此++p將首先發生,然后再取消引用*(++p)

暫無
暫無

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

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