【发布时间】:2016-12-02 13:39:12
【问题描述】:
在结构中调用变量时-> 和. 之间有什么区别?我已经看到它们都用于各种场景,但无法确定它们之间的区别。
【问题讨论】:
-
当你有一个指向结构的指针时使用一个。另一种是当你有一个结构的 instance 时。请find a good book to read about it.
标签: c
在结构中调用变量时-> 和. 之间有什么区别?我已经看到它们都用于各种场景,但无法确定它们之间的区别。
【问题讨论】:
标签: c
-> 表示您有一个变量指向包含该结构的一块内存。要访问其成员,您必须取消引用指针,然后将偏移量添加到成员。 -> 会为您做到这一点。
. 表示你的变量是结构体,你只需要给成员加上偏移量。
正如用户 Eliot B 指出的那样,如果您有一个指向结构的指针 s,则可以通过两种方式访问成员 elem:s->elem 或 (*s).elem。
使用(*s),您有一个“是”结构的表达式,现在您可以使用点运算符访问elem。
【讨论】:
s->elem 等于 (*s).elem
【讨论】:
区别在于结构的定义实例。 '->' 和 '.'运算符总是关于左操作数。
如果左操作数是指针,则使用'->',否则使用'.'。
例如。
struct Foo bar1;
struct Foo* bar2 = malloc(sizeof(struct Foo));
bar1.variable = "text";
bar2->variable = "text";
【讨论】:
x->y(-> 是指向成员运算符的指针)等价于(*x).y。由于运算符优先级,你不能写*x.y,因为它会被评估为*(x.y)。
前者更容易输入,也更清晰。当x 是指向包含成员y 的结构的指针时使用它。
【讨论】: