C中的“ – >”和“。”成员访问操作有何不同

我看了一些资源告诉我如何->. 是不同的,但他们似乎做同样的事情。 ->在结构上表现得像点运算符吗?

. 当你有一个struct时使用->当你有一个指向struct的指针时使用-> 。 箭头是用于取消引用指针然后使用的简短forms.p->field(*p).field

它们几乎是一回事。 唯一的区别是“ – >”指向左侧的结构,而“。” 采取结构; “ – >”在访问struct成员之前对指针进行deferences(即跟随)。 所以,

 struct foo bar; bar.x = 0; 

是相同的:

 struct foo bar; struct foo *diddly = &bar; diddly->x = 0; 

您在访问对象的成员时使用了一个点,而在通过指向对象的指针访问成员时使用了箭头 – >

->是一个struct指针是什么. 是一个结构。

 struct Data data; data.content = 1; struct Data* pData = &data; pData->content = 2; 

啊,我在查看区域设置时遇到了同样的问题。 一个用于通过指针访问属性,一个用于解除引用的结构:

 #include  int main (void) { struct lconv *locale_ptr; locale_ptr = localeconv(); printf("Currency symbol: %s\n", (*locale_ptr).currency_symbol); } 

相当于:

 int main (void) { struct lconv *locale_ptr; locale_ptr = localeconv(); printf("Currency symbol: %s\n", locale_ptr->currency_symbol); } 

最简单的就是你使用。 在Struct本身上操作时 – >在指向struct的指针上操作时。

要在代码中显示:

  struct s myStruct; myStruct.num = 5; 

有效,但是:

  struct s myStruct; myStruct->num = 5; 

因为myStruct不是指针而无效。

  struct s *myStruct; myStruct->num = 5; 

会有效的。

– >运算符实际上是(* myStruct).num的简写;

与许多其他语言不同,C语言允许变量将对象(此处为结构)作为值,并将对象指针作为值。 根据使用的变量类型,“。” 或“ – >”必须分别使用。

[。]对结构的对象进行操作。 一旦声明了特定结构的对象,[。]运算符就可以用于直接与成员一起操作。

[ – >]对指向结构对象的指针进行操作。 这是一个取消引用运算符,专门用于指向具有成员的对象的指针。 从而使我们能够访问我们有参考的对象的成员。

根据声明,您可以使用这些运算符。

运算符a-> b,规范地表示(* a).b。 因此,与“。”不同,它将取消引用它的第一个参数。

我在这一点上可能是错的,但我的理解是它不是“正式”C的一部分(你在问题中特别提到了C)。 这是大多数C编译器供应商已经添加到C的C ++构造。但是,我必须承认我没有跟上C的变化,所以我可能完全错了。

在C ++中还有其他差异。 “ – >”运算符是可重载的,其中“。” 不是。