首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要援助-了解目标-c

需要援助-了解目标-c
EN

Stack Overflow用户
提问于 2012-10-23 11:58:30
回答 1查看 145关注 0票数 0

这是来自苹果阻止文档的,我很难理解,请任何一个人用简单的方式来解释

...You可以对任意类型的指针进行块引用,反之亦然。但是,不能通过指针解引用操作符(*)-thus取消对块引用的引用,不能在编译时计算块的大小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-23 14:51:09

简单地说,块就是一个参考。块中的代码存储在内存中,可以通过变量访问。void (^addingBlock)(int);是一个块声明,它可以通过addingBlock变量访问(如,它可以像addingBlock(5);一样被调用)。

现在,可以将此引用转换为C识别的指针类型。有点像函数指针。正如文档所述,唯一的视觉区别是使用*而不是^。这意味着您可以将块强制转换到函数指针:

代码语言:javascript
运行
复制
void (*funcPointer)(int) = (void(*)(int))addingBlock;

甚至是一个空指针(或任何类型!)

代码语言:javascript
运行
复制
void* voidPtr = (void*)addingBlock;

但是你提供的引语是,有了这个指向一个块的指针,你就不能“取消引用”。这意味着解释指针地址,并获取该地址后面的数据。无法做到这一点意味着您无法在编译时确定它的大小。

为什么?由于Obj的动态性,块的内容只能在运行时确定,而C在本质上是静态的,在编译时决定了很多。

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

https://stackoverflow.com/questions/13029925

复制
相关文章

相似问题

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