如何在c中解释* p1-> p2和* p1.a?

时间:2011-06-05 23:05:05

标签: c syntax

这对我来说似乎含糊不清:

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

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

编译器如何解释这些表达式?

3 个答案:

答案 0 :(得分:12)

这一切都归结为operator precedence->.都优先于*(在此上下文中),因此这两个表达式相当于:

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

答案 1 :(得分:2)

箭头(->)和点(.)的优先级高于取消引用运算符(*),因此它将被解析为:

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

答案 2 :(得分:0)

1)p1是指向包含p2的struct的指针,p2是指向你要取消引用的东西的指针。 *(P1-> P2) 2)p1是包含a的结构的变量(不是指针),a是你要引用的指针。 *(p1.a)

了解更多信息,请参阅C Operator Precedence and Associativity