2016-12-02 30 views
-2

在调用结构中的变量时,->.有什么区别?我已经看到它们在各种情况下使用,但无法识别它们之间的差异。调用结构变量的区别

+3

当你有一个*指针*结构时使用一个。另一个是当你有一个*实例*的结构。请[找一本好书阅读它](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)。 –

回答

2
  • ->意味着你有一个指向一块含有结构存储器的变量。要访问其成员,您必须取消引用指针,然后将偏移量添加到成员。 ->为你做到了。

  • .表示您的变量的结构,您只需将偏移量添加到成员。

随着用户艾略特乙组分了,如果你有一个指针s一个struct,然后访问成员elem可以通过两种方式来完成:s->elem(*s).elem

使用(*s)您有一个表达式“is”是结构,现在您使用点运算符来访问elem

1

区别在于结构定义的实例。 ' - >'和'。'操作符总是关于左操作数。

如果左操作数是一个指针,那么你使用' - >',否则你使用'。'。

例如。

struct Foo bar1; 
struct Foo* bar2 = malloc(sizeof(struct Foo)); 
bar1.variable = "text"; 
bar2->variable = "text"; 
1

x->y->指针构件操作者)等效于(*x).y。由于运算符的优先顺序,您不能编写*x.y,因为它将被评估为*(x.y)

前者更容易打字,更清晰。当x是指向包含成员y的结构的指针时使用。