0

可能重复:
为什么 C 中的箭头 (->) 运算符存在?

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

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

4

4 回答 4

3

来自 C99 规范。

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

运算符的第一个操作数->应具有指向合格或不合格结构的类型指针指向合格或不合格 union的指针,第二个操作数应命名指向的类型的成员。

我的猜测是,出于识别目的,他们使用两个运算符进行成员访问。即指针类型结构变量是->.普通结构变量。

例如:

struct sample E, *E1;

表达式(&E)->MOS是一样的E.MOS并且
(*E1).MOS是一样的E1->MOS

于 2012-12-06T04:53:14.007 回答
3

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

于 2012-12-06T04:57:09.103 回答
2

可能吗?是的。语法如下:

(*ptr).member

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

ptr->member

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

于 2012-12-06T05:06:01.897 回答
0

. 用于结构变量,-> 用于指针。如果 p 是一个指针,你可以做 p->value 或 (*p).value,它们是一样的。

于 2012-12-06T04:48:15.453 回答