3

我的程序中需要一个好的老式二维整数数组,但无论我如何尝试将其声明为 ivar,然后使用 @property/@synthesize,我都会收到一个或另一个编译器投诉。

我声明

int spotLocations[10] [10] 

作为伊瓦尔。

这很有效,但是@property/@synthesize 过程永远不会通过集合。

4

2 回答 2

4

你不能这样做。数组变量在 C 中永远不能是左值,这意味着您永远不能声明返回数组的函数,因为不可能将函数的结果分配给数组变量(因为它不能是左值)。

属性只是声明返回类型的函数的一种简写方式。由于函数永远不能返回数组,因此您永远不能将属性声明为数组。

如果你绝对需要像这样移动矩阵,你可以将它包装在一个结构中,它可以是左值:

typedef struct {
  int value[10][10];
} matrix;

...

@property matrix spotLocations;

当然,访问位置有点复杂,你必须使用

spotLocations.value[x][y]
于 2009-12-02T17:49:51.617 回答
2

将实例变量声明为指针,然后在 init 方法中动态创建数组。对@property 声明使用assign 参数。

分配:

spotLocations = malloc(100 * sizeof(int));

通过执行以下操作访问列和行:

int aValue = spotLocations[x + y * 10];

完成后请记住 free() 指针。

于 2009-12-02T18:03:37.297 回答