簡體   English   中英

取消引用和后綴的優先順序

[英]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 ++),

  1. 第一個p ++計算,但返回前一個p值
  2. 然后用前一個p值評估* p並進行賦值
  3. 然后語句結束並且p ++ post increment值現在處於活動狀態,即指針p現在被碰撞。

運算符的優先級是編譯器解釋的順序,而不是執行順序。

運算符優先級實際上意味着“在哪里放括號”。 因此,你是正確的*p++*(p++) 但現在我們需要了解什么是*(p++) 這意味着由於后固定操作,取*p然后增加p++

因此,簡而言之,您只是將編譯器的解釋順序(由括號或優先級確定)和執行順序(由后置或預定義定義確定)混合在一起。

暫無
暫無

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

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