为什么C都有。和 - >用于寻址结构成员? [重复]

问题描述 投票:0回答:4

可能重复: Why does the arrow (->) operator in C exist?

为什么C都有。和 - >用于寻址结构成员?

是否有可能有这样的修改语言语法,我们可以将p作为指向struct的指针,并获得结构成员的值,就像p.value一样?

c
4个回答
3
投票

您可以将p->m视为(*p).m的简写


3
投票

来自C99 Spec。

.运算符的第一个操作数应具有合格或不合格的结构或联合类型,第二个操作数应指定该类型的成员。

->运算符的第一个操作数应具有指向限定或非限定结构的类型指针或指向限定或非限定联合的指针,第二个操作数应指定指向的类型的成员。

我的猜测是,为了识别目的,他们使用两个运营商进行成员访问。即对于普通的struct变量,指针类型struct变量是->.

例如:

struct sample E, *E1;

表达式(&E)->MOSE.MOS(*E1).MOSE1->MOS相同


2
投票

可能吗?是。语法如下:

(*ptr).member

括号是必需的,因为结构成员运算符.的优先级高于间接运算符*。但在使用几次后,您会同意以下更容易使用:

ptr->member

为什么C兼得?指向结构的指针经常在C中使用,创建了一个特殊的运算符,称为结构指针运算符->。它的工作是更清楚,更方便地表达结构的指针。


0
投票

。用于struct变量, - >用于指针。如果p是指针,你可以做p-> value或(* p).value,它们是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.