我的程序中需要一个好的老式二维整数数组,但无论我如何尝试将其声明为 ivar,然后使用 @property/@synthesize,我都会收到一个或另一个编译器投诉。
我声明
int spotLocations[10] [10]
作为伊瓦尔。
这很有效,但是@property/@synthesize 过程永远不会通过集合。
我的程序中需要一个好的老式二维整数数组,但无论我如何尝试将其声明为 ivar,然后使用 @property/@synthesize,我都会收到一个或另一个编译器投诉。
我声明
int spotLocations[10] [10]
作为伊瓦尔。
这很有效,但是@property/@synthesize 过程永远不会通过集合。
你不能这样做。数组变量在 C 中永远不能是左值,这意味着您永远不能声明返回数组的函数,因为不可能将函数的结果分配给数组变量(因为它不能是左值)。
属性只是声明返回类型的函数的一种简写方式。由于函数永远不能返回数组,因此您永远不能将属性声明为数组。
如果你绝对需要像这样移动矩阵,你可以将它包装在一个结构中,它可以是左值:
typedef struct {
int value[10][10];
} matrix;
...
@property matrix spotLocations;
当然,访问位置有点复杂,你必须使用
spotLocations.value[x][y]
将实例变量声明为指针,然后在 init 方法中动态创建数组。对@property 声明使用assign 参数。
分配:
spotLocations = malloc(100 * sizeof(int));
通过执行以下操作访问列和行:
int aValue = spotLocations[x + y * 10];
完成后请记住 free() 指针。