目标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:
。