[英]Precedence of dereference and postfix
當我通過K&R閱讀TCPL時,我無法理解兩個表達式:
*p++ = val; /*push val onto stack */
這是我的想法:
dereference和postfix具有相同的優先級,並且關聯性是從右到左,所以
*p++ = val
可能與*(p++) = val
,因為指針通常是頂部的下一個位置,所以在這段代碼中,p因為括號而首先增加1,所以p是上面的兩個單位當前頂部,但不是當前頂部之上的一個單位,其中val應該是!!! 謝謝
前綴增量/減量和解引用運算符是相同的優先級,但后綴運算符更高,因此*p++
與*(p++)
,這就像寫*p = val; p++;
*p = val; p++;
如果你寫了(*p)++ = val
,它就不會編譯,因為你試圖為一個數字賦值。
K&R中運算符的優先級和相關性,表2-1,第53頁,不像Stroustrup中的最新表那樣精細和完整,tC ++ PL,Sed,sec 6.2運算符匯總,p120-121。
C ++運算符優先級 Agnew的答案非常好。
他指出,一元運算符的關聯確實是R-> L,而*(p ++),
運算符的優先級是編譯器解釋的順序,而不是執行順序。
運算符優先級實際上意味着“在哪里放括號”。 因此,你是正確的*p++
與*(p++)
。 但現在我們需要了解什么是*(p++)
。 這意味着由於后固定操作,取*p
然后增加p++
。
因此,簡而言之,您只是將編譯器的解釋順序(由括號或優先級確定)和執行順序(由后置或預定義定義確定)混合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.