簡體   English   中英

箭頭運算符和后增量的優先級?

[英]Precedence of the arrow operator and post increment?

C 的新功能。 所以我看到了這行代碼

system->word[system->index++] = system->next_char;

是否等同於:

system->word[system->index] = system->next_char;
index++;

職位增量的優先級是什么? 在線上的所有操作都執行完成后,它是否只將索引的值增加 1?

更新system->index被定義為未排序(未指定在語句中的其他操作之前或之后)的副作用 更新可能發生在其他操作之前、期間或之后。

只要它沒有在語句的其他地方使用,它沒有排序的事實就無關緊要,因為如果它沒有在其他地方使用,那么語句所做的任何事情都不會受到更新發生時的影響。 (注意,即使 memory 中的system->index的更新在使用該值之前完成,編譯器也會響應確保使用更新前的值。)

如果正在更新的 object 在語句的其他地方以無順序的方式使用(即,沒有規則指定先更新還是其他使用),則程序的行為將不會由 C 標准定義。

這不是優先級的結果。 優先級決定了如何解釋表達式的結構,而不是它們操作的順序。

不是。

system->word[system->index++] = system->next_char;

相當於:

system->word[system->index] = system->next_char;
system->index++;

因為indexsystem指向的struct上的一個字段。 如果您還有一個名為index的標量變量,則您沒有錯誤,但應該增加錯誤的變量。

作為一般規則,所有一元運算符首先在變量的右側進行計算,然后是左側的運算符(右側運算符的優先級高於左側運算符)並從最接近操作數到最遠進行計算。 所以最靠近操作數的運算符首先計算,然后是右邊的下一個......所以直到右邊沒有更多的右運算符,然后是左邊最近的運算符,依此類推,直到沒有更多的左運算符在左邊。

那么如果我們有-x++會發生什么? ++首先被評估為x的值,並且計划發生變量的后遞增,然后評估左側的值,作為結果給出x遞增之前的值,改變符號,以及變量x使其值遞增(僅遞增,無符號更改)。

另一個例子:讓我們計算++x->field :首先->field (整個東西, ->箭頭和字段名稱)被認為是右一元運算符,給定一個指針獲取名為field fo 的字段中的值x指向的結構。 該值遞增(並再次存儲在x->field )並且返回的值是最終遞增的值。

最后一個例子:讓我們計算*p++ p的值計划后遞增,但保留其先前的值。 然后p的舊值被用來訪問它所指向的值,給原來指向的值。 最后p遞增並指向訪問值旁邊的值。

暫無
暫無

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

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