2011-06-07 51 views
0

可能重複:
++ on a dereferenced pointer in C?爲什麼* ptr ++的行爲像*(ptr ++)而不是(* ptr)++?

類似地,會是什麼 * PTR + = 1 * PTR%8,和 * PTR/8 是?

差異似乎令人困惑。 這可能是編譯器依賴的嗎?

+8

爲什麼'1 + 2 * 2'5而不是6? – delnan 2011-06-07 20:12:04

+0

[https://secure.wikimedia.org/wikipedia/en/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence] – icktoofay 2011-06-07 20:13:13

+2

有趣的是,每個人都設法找到不同的「運營商優先級」鏈接,頁面。 – Andrei 2011-06-07 20:15:29

回答

2

由於優先級(這就是C的工作原理)。

C FAQ on the * exact * subject

後綴++和 - 操作 本質上具有更高的優先級比 前綴元運算符。 因此,* p ++相當於 *(p ++);

4

它與運算符優先權有關。 *運算符的優先級低於++,因此它最後一次出現。

這裏有一個維基百科圖表,列出了所有的運營商:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

您可以將圖表後綴++有2個,而*解引用的優先級在看到有3.優先級(數字略有倒退,如較低的數字具有較高的優先級)。

2

因爲operator precedence

後綴的++具有比*運算符的優先級高。它不依賴於編譯器。

* PTR + = 1會增加值所指向的ptr由一個(或調用相應的重載操作) * PTR%8將計算的值的餘數由PTR除以指向8 * PTR/8將計算值的劃分指向PTR和8

1

wikipedia

對於ISO C 1999標準,部分6.5.6音符71點的狀態,通過該規範定義提供的C語法C運營商的優先級

這意味着運算符優先級由C標準管理。

1

差異似乎令人困惑。這可能是編譯器依賴的嗎?

不,操作符的優先級在c lang規範中定義。 並且因此* prt ++總是在後增量發生之前引用指針。

相關問題