C のブロック内(^ に続く関数のあれ)では、配列への参照はできないらしい。
わかりやすい例がここにあった。
void block_arr()
{
int res = 0;
int i[4] = { 3, 4, 4, 1 };
int* j = i;
int (^test_block )(int) = ^(int num)
{
return num + i[1]; // This is an error: "error: cannot refer to declaration with an array type inside block"
// return num + j[1]; // This would work
};
res = test_block(7);
}
なんでこんな制限があるのか最初よくわからなかったのだが、そこの人いわく、「ブロック内で配列を使ってしまうと配列全体をコピーする必要があるため、非効率だ。ポインタは OK 。」ということらしい。