2011-06-05 73 views
2

這似乎曖昧的對我說:* c1是如何解釋* p1-> p2和* p1.a?

*p1->p2 
    *(p1->p2) or (*p1)->p2 

*p1.a 
    *(p1.a) or (*p1).a 

編譯器如何解釋這樣的表達?

+4

使用[運算符優先級(http://www.cppreference.com/wiki/language/operator_precedence)。 – 2011-06-05 23:07:16

回答

12

這一切都降至operator precedence。既->.具有比*更高的優先級(在這種情況下),所以兩個表達式是等效於:

*(p1->p2) 
*(p1.a) 
2

箭頭(->)和點(.)具有比引用操作更高的優先級(*

*(p1->p2) 
*(p1.a) 
0

1)p1爲指針結構包含P2,P2是指針,你去參考的東西:所以它是被解析。 *(p1-> p2) 2)p1是可變的(不是指針),它包含一個結構體,一個是你去引用的指針。 *(p1.a)

更多看到C Operator Precedence and Associativity

相關問題