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 ++中还有其他差异。 “ – >”运算符是可重载的,其中“。” 不是。