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

时间:2012-12-06 04:46:25

标签: c

  

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

为什么C同时具有 - > 来寻址结构成员?

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

4 个答案:

答案 0 :(得分:3)

来自C99 Spec。

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

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

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

例如:

struct sample E, *E1;

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

答案 1 :(得分:3)

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

的简写

答案 2 :(得分:2)

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

(*ptr).member

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

ptr->member

为什么C同时具有这两种?在C中经常使用指向结构的指针来创建一个特殊的运算符,称为结构指针运算符 ->。它的工作是更清楚,更方便地表达结构指针。

答案 3 :(得分:0)

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