关于p.a和p-> a的区别是什么,其中p是指针?

时间:2011-04-13 12:57:39

标签: c pointers

p.a和p-> a有什么区别吗?其中p是指针?或者他们是一样的。

5 个答案:

答案 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仅有效。