我已经查看了一些资源,告诉我->
和.
是如何不同的,但它们似乎做同样的事情。 ->
是否像结构上的点运算符一样?
答案 0 :(得分:17)
.
,当你有一个指向结构的指针时使用->
。箭头是用于取消引用指针然后使用.
的简短形式:p->field
与(*p).field
相同。
答案 1 :(得分:7)
它们几乎是一回事。唯一的区别是“ - >”在“。”的同时获取指向左侧结构的指针。采取结构; “ - >” 中在访问struct成员之前的指针的deferences(即跟随)。所以,
struct foo bar;
bar.x = 0;
与:
相同struct foo bar;
struct foo *diddly = &bar;
diddly->x = 0;
答案 2 :(得分:2)
您在访问对象的成员时使用了一个点,并且箭头 - >通过指向对象的指针访问成员时
答案 3 :(得分:2)
->
是一个结构指针,.
是一个结构。
struct Data data;
data.content = 1;
struct Data* pData = &data;
pData->content = 2;
答案 4 :(得分:2)
啊,我在查看区域设置时遇到了同样的问题。一个用于通过指针访问属性,一个用于解除引用的结构:
#include <locale.h>
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);
}
答案 5 :(得分:1)
最简单的就是你使用。在Struct本身上操作时 - &gt;当操作指向结构的指针时。
在代码中显示:
struct s myStruct;
myStruct.num = 5;
有效,但是:
struct s myStruct;
myStruct->num = 5;
无效,因为myStruct不是指针。
struct s *myStruct;
myStruct->num = 5;
有效。
- &gt; operator实际上是(* myStruct).num的简写;
答案 6 :(得分:1)
与许多其他语言不同,C语言允许变量将对象(此处为结构)作为值,并将对象指针作为值。根据使用的变量类型,“。”或“ - &gt;”必须分别使用。
答案 7 :(得分:1)
[。] 对结构的对象进行操作。一旦声明了特定结构的对象,[。]运算符就可以用于直接与成员一起操作。
[ - &gt;] 对指向结构对象的指针进行操作。这是一个取消引用运算符,专门用于指向具有成员的对象的指针。从而使我们能够访问我们有参考对象的成员。
根据声明,您可以使用这些运算符。
答案 8 :(得分:0)
算子a-> b,规范地表示(* a).b。 因此,与“。”不同,它将取消引用它的第一个参数。
我在这一点上可能是错的,但我的理解是它不是“正式”C的一部分(你在问题中特别提到C)。这是C ++构造,大多数C编译器供应商已经添加到C中。但是,我必须承认我没有跟上C的变化,所以我可能完全错了。
在C ++中还有其他差异。 “ - &gt;”运算符是可重载的,其中“。”不是。
答案 9 :(得分:0)
来访问类的成员。但是
.
不可重载,→
可重载下面是一个示例,展示了如何同时使用它们:
#include<iostream>
class A {
public: int b;
A() { b = 5; }
};
int main() {
A a = A();
A* x = &a;
std::cout << "a.b = " << a.b << "\n";
std::cout << "x->b = " << x->b << "\n";
return 0;
}