这对我来说似乎含糊不清:
*p1->p2
*(p1->p2) or (*p1)->p2
*p1.a
*(p1.a) or (*p1).a
编译器如何解释这些表达式?
答案 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