首先,表達式中得有多個運算符,這樣就存在左右兩邊都有運算符的操作數:
1 如果這個操作數兩邊的運算符優先級不同,則這個操作數屬於優先級高的那個運算符,它優先參與優先級高的運算符表示的運算;
2 如果這個操作數兩邊的運算符優先級相同,則這個操作數屬於左右那個運算符,就要看著兩個運算符的結合性了(註意,相同優先級的運算符必然有相同的結合性,否則此處就出現bug了),如果運算符結合性是”從左到右“,則操作數屬於左側的運算符,就是說運算符是從左側開始處理的;如果結合性是”從右到左“,則操作數屬於右側的運算符,這兩個同優先級的運算符右側的先處理。
結合性舉例:
(1) a + b - c
b就是前面說的兩邊有兩個相同優先級的操作數,+ 和 - 的結合性是”從左到又“,所以 + 先處理,- 後處理。
(2) a = b = c
b兩邊有兩個相同優先級的運算符,= 結合性是”從右到左“,所以右側的 = 先處理,a = b = c 等價於 a = (b = c);同理,a = b += c 等價於 a = (b += c),因為 + 和 += 是相同優先級的。
(3) *p++
p左右的兩個運算符優先級相同,但都是”從右到左“結合性,所以這樣理解:*(p++)。