p.a和p-> a有什么区别吗?其中p是指针?或者他们是一样的。
答案 0 :(得分:4)
.
运算符实际上是结构成员访问的运算符。
struct Foo
{
int bar;
int baz;
} aFoo;
aFoo.bar = 3;
如果你有一个指向结构的指针(非常常见),你可以使用指针解除引用和.
运算符来访问它的成员。
struct Foo *p;
p = &aFoo;
(*p).baz = 4;
需要使用括号,因为.
的优先级高于*
。以上解除引用某个东西指向的结构的成员是非常常见的,因此->
被引入作为简写。
p->baz = 4; // identical to (*p).baz = 4
如果p是指针,你永远不会在普通C中看到p.anything
,至少在编译的任何东西中都看不到。但是,它用于表示Objective-C中的属性访问,这是IMO的错误。
答案 1 :(得分:3)
是的,你不能对指针执行p.a
,点运算符需要一个实际的实例,即正确的struct
类型的值。
请注意,“引擎盖下”,p->a
相当于(*p).a
,但更容易输入和阅读。没有人使用过后一种形式,但它有时也很方便,可以理解箭头操作符的作用。
答案 2 :(得分:1)
尝试(* p).a或(& p) - > a其中p分别是指针和实例; - )
答案 3 :(得分:0)
如果p是指针,那么p.a语法无效。
答案 4 :(得分:0)
这是编译时错误.p-> a仅有效。