目标C中的“ – >”是什么?

我已经看到这个操作符在“学习Mac上的Objective C”中的示例代码中popup了好几遍。

我相信这是Objective Cinheritance的C语言的运算符。 我试着谷歌search堆栈溢出奇怪的没有出现。

有英文名吗?

它与结构有关。

当我们在栈上有一个本地可用的结构体时,我们用它来访问它的成员. 运营商。 例如:

 CGPoint p = CGPointMake(42,42); NSLog(@"%f", px); 

但是,如果我们有一个指向结构的指针 ,我们必须使用->运算符:

 CGPoint *p = malloc(1*sizeof(CGPoint)); p->x = 42.0f; NSLog(@"%f", p->x); free(p); 

-> 并不特定于Objective-C。 这是一个C运营商。

现在清除了,它是成员访问操作符,相当于一个指针取消引用,然后对结果使用点运算符。

假设你有一个这样的struct

 typedef struct Person { char *name; } Person; Person *jacob = malloc(1*sizeof(Person)); 

所以这个声明:

 jacob->name = "Jacob"; 

相当于这样的说法:

 (*jacob).name = "Jacob"; 

当然,不要忘记free

 free(jacob); 

在C

 a->b 

是一个捷径

 (*a).b 

这是为了解引用指向的结构的成员。

这是有用的,因为。 绑定比解引用操作符*强。 所以通过使用 – >避免使用这些丑陋的括号。

这是一个成员select(或访问)相当于一个指针去引用(如注释中指出)

在C / C ++中, a->member相当于(*a).member

在C中意味着同样的事情 。 它可以用来直接访问对象的实例variables,但通常这不是最佳实践。 你所指的点符号是一个属性 ,而不是通常的C点符号。

这是“间接成员访问运营商”。 这是一个C运算符,Objective-C和C ++都inheritance了这个运算符。

这个

 a->b 

相当于:

 (*a).b 

但less打字。 (由于*和…的优先级,所以在扩展forms中需要父主题)

a->b相当于(*a).b ,并指定b指向的对象的成员b

在C标准中,它被称为“结构/联合指针操作符”,这不是真正的最后的名字。

所有人都说过,它是访问结构体指针成员的捷径,但是只需要注意一下,由于Objective-C运行时的工作方式,您可以使用相同的语法来访问ivars:

 @interface Foo : NSObject { NSString *something; } /* ... SNIP ... */ NSLog(@"something = %@", foo->something); // Where foo is an instance of the Foo class 

当你需要访问不被方法暴露的ivars时,这是很方便的。 特别是当你需要在你的对象上实现copyWithZone: