我有一个像这样定义的C数组块:
void (^block1)() = ^void() {
doSomething1();
doSomething2();
};
void (^block2)() = ^void() {
doSomething3();
doSomething4();
};
// etc.
typedef void (^myBlockType)();
myBlockType arrayBlock[2];
arrayBlock[0] = block1;
arrayBlock[1] = block2;
然后我试图从块内部访问该C数组,如
void (^adjust)(int value) = ^void(int value) {
myBlockType myBlock = arrayBlock[value];
};
和Xcode抱怨
不能在块
中引用数组类型的声明
如果这是一个像浮点数,整数等等的数组,那么this solution但是对于C数组的块如何做呢?
我可以吗
myBlockType array = calloc(2, sizeof(myBlockType));
?这是正确的方法吗?在这种情况下,我如何初始化值?
答案 0 :(得分:0)
好的,评论跟踪之后的一些指示,但是你需要学习并理解这里发生了什么。
我可以吗
myBlockType array = calloc(2, sizeof(myBlockType));
T x[n]
中,名称x
的类型为T *
- 指针。使用指针操作(x[n]
& *(x + n)
)将索引操作*
定义为与+
相同。因此,您可以将数组视为指针,将指针视为数组,例如你可以"索引"指针。calloc
想法是一种可能的解决方案,但是类型错误,array
需要声明为指针。array
的类型必须包含所有权限定符。您可能应该使用__strong
所以您的"数组"拥有它引用的项目,就像NSArray
一样。calloc
(或malloc
等)的任何内容,如果需要,您有责任致电free
。了解这些子弹和你可能的解决方案(不止一个)就会失败。
HTH