为什么C同时具有。和 - > 来寻址结构成员?
是否可以使用这样的修改语言语法,我们可以将 p 作为指向struct的指针,并获取结构成员的值,就像 p.value 一样? / p>
答案 0 :(得分:3)
来自C99 Spec。
.
运算符的第一个操作数应具有合格或不合格的结构或联合
type,第二个操作数应命名该类型的成员。
->
运算符的第一个操作数应具有类型指向限定或非限定的指针
结构或指向合格或不合格联合的指针,第二个操作数应为
命名指向该类型的成员。
我的猜测是,为了识别目的,他们使用两个运营商进行会员访问。即对于普通的struct变量,指针类型struct变量是->
和.
。
例如:
struct sample E, *E1;
表达式(&E)->MOS
与E.MOS
相同,而(*E1).MOS
与E1->MOS
相同
答案 1 :(得分:3)
您可以将p->m
视为(*p).m
答案 2 :(得分:2)
有可能吗?是的。语法如下:
(*ptr).member
括号是必需的,因为结构成员运算符 .
的优先级高于间接运算符 *
。但在使用几次之后,您会同意以下更容易使用:
ptr->member
为什么C同时具有这两种?在C中经常使用指向结构的指针来创建一个特殊的运算符,称为结构指针运算符 ->
。它的工作是更清楚,更方便地表达结构指针。
答案 3 :(得分:0)
。用于结构变量,和 - >是指针。如果p是指针,你可以做p-> value或(* p).value,它们是相同的。