2015-12-13 34 views
-4

为什么有时使用点语法访问结构中的成员变量,但使用其他时间->?我一直在学习iOS中的一些C库,并在将结构传递给函数时,似乎经常使用箭头语法。我收集它与指针/内存地址/ C类型的东西有关,但我不确定''之间的意义。和' - >'是在访问结构体上的字段时。C中的结构语法( - >)

+0

当你有指向struct的指针时,使用' - >'。当你有struct对象时使用'.'。 – ctomek

回答

4

.运算符用于访问结构或联合的成员。 ->被定义为使得a->b其中b*a的结构或联合成员等于(*a).b。这个语法糖为了方便而存在,因为一直写着(*a).b是很乏味的。请记住:如果a是指针,则使用->,如果它是结构或联合,请使用.

一些更新的语言(如Go)取消了区分,但没有使编译器复杂化,因为您需要执行更复杂的类型检查以查找如何编译.,所以我猜这就是为什么Ken Thompson没有那时候不会那么做。

+0

所以确保我已经得到它。这些句法正确吗? AStruct * structPointer =(AStruct *)someParam; // structPointer-> aMember // AStruct structVar = * structPointer; // structVar.aMember // –

+0

嗯,它的意见似乎不让我使用星号* –

+0

@AlexanderBollbach尝试逃避星号是这样的:'\ *'。或者甚至更好,把你的代码反引号:'*(AStruct).someParam'。 – fuz