首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是目标C中的"->“?

什么是目标C中的"->“?
EN

Stack Overflow用户
提问于 2010-12-20 08:44:34
回答 8查看 2.3K关注 0票数 13

我在“在Mac上学习Objective C”中的示例代码中多次看到过这个操作符。

我相信它是C语言中的一个运算符,而Objective C继承了它。我试着用谷歌搜索和搜索Stack Overflow,奇怪的是什么也没找到。

它有英文名字吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-12-20 08:50:05

它与结构有关。

当一个结构在堆栈上本地可用时,我们使用.操作符访问它的成员。例如:

代码语言:javascript
复制
CGPoint p = CGPointMake(42,42);
NSLog(@"%f", p.x);

然而,如果我们有一个指向结构的指针,我们必须使用->操作符:

代码语言:javascript
复制
CGPoint *p = malloc(1*sizeof(CGPoint));
p->x = 42.0f;
NSLog(@"%f", p->x);
free(p);
票数 10
EN

Stack Overflow用户

发布于 2010-12-20 08:48:04

->,而不是Objective-C特有的。这是一个C运算符。

现在清除了,它是成员访问运算符,相当于指针解引用,然后在结果上使用点运算符。

假设你有一个这样的struct

代码语言:javascript
复制
typedef struct Person {
   char *name;
} Person;

Person *jacob = malloc(1*sizeof(Person));

所以这句话:

代码语言:javascript
复制
jacob->name = "Jacob";

等同于以下语句:

代码语言:javascript
复制
(*jacob).name = "Jacob";

当然,不要忘记free

代码语言:javascript
复制
free(jacob); 
票数 10
EN

Stack Overflow用户

发布于 2010-12-20 08:50:53

在C中

代码语言:javascript
复制
a->b

是一个快捷方式,

代码语言:javascript
复制
(*a).b

它用于取消引用所指向的结构的成员。

这是很有用的,因为。绑定比取消引用运算符更强*。因此,通过使用->,您可以避免使用这些难看的括号。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4486048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档