可能重复:
为什么 C 中的箭头 (->) 运算符存在?
为什么 C 两者都有。和->用于寻址结构成员?
是否有可能有这样修改过的语言语法,我们可以将p作为指向 struct 的指针并像p.value一样获取结构成员的值?
可能重复:
为什么 C 中的箭头 (->) 运算符存在?
为什么 C 两者都有。和->用于寻址结构成员?
是否有可能有这样修改过的语言语法,我们可以将p作为指向 struct 的指针并像p.value一样获取结构成员的值?
来自 C99 规范。
运算符的第一个操作数.
应具有合格或不合格的结构或联合类型,第二个操作数应命名该类型的成员。
运算符的第一个操作数->
应具有指向合格或不合格结构的类型指针或指向合格或不合格 union的指针,第二个操作数应命名指向的类型的成员。
我的猜测是,出于识别目的,他们使用两个运算符进行成员访问。即指针类型结构变量是->
和.
普通结构变量。
例如:
struct sample E, *E1;
表达式(&E)->MOS
是一样的E.MOS
并且
(*E1).MOS
是一样的E1->MOS
您可以将其p->m
视为简写(*p).m
可能吗?是的。语法如下:
(*ptr).member
括号是必需的,因为结构成员运算符 .
的优先级高于间接运算符 *
。但是在使用几次之后,您会同意以下内容更易于使用:
ptr->member
为什么C两者都有?指向结构的指针在 C 中经常使用,以至于创建了一个特殊的运算符,称为结构指针运算符 ->
。它的工作是更清楚、更方便地表达指向结构的指针。
. 用于结构变量,-> 用于指针。如果 p 是一个指针,你可以做 p->value 或 (*p).value,它们是一样的。