在我的程序中,我需要一个很好的老式的二维整数数组,但无论我如何尝试将其声明为ivar,然后使用@property/@synthesize,我都会收到这样或那样的编译器抱怨。
我宣布
int spotLocations[10] [10] 作为一个伊瓦尔。
这么多工作都可以,但是@property/@synthesize进程永远不会通过测试。
发布于 2009-12-03 01:49:52
你不能这么做。在C中,数组变量永远不能是左值,这意味着你永远不能声明一个返回数组的函数,因为不可能将函数的结果赋给一个数组变量(因为它不能是左值)。
属性只是声明返回类型的函数的一种快捷方式。因为函数永远不能返回数组,所以你永远不能声明一个数组的属性。
如果你确实需要像这样移动矩阵,你可以把它包装在一个struct中,这个struct可以是左值:
typedef struct {
int value[10][10];
} matrix;..。
@property matrix spotLocations;当然,访问这些位置有点复杂,您必须使用
spotLocations.value[x][y]发布于 2009-12-03 02:03:37
将实例变量声明为指针,然后在init方法中动态创建数组。对@property声明使用assign参数。
分配:
spotLocations = malloc(100 * sizeof(int));通过执行以下操作来访问列和行:
int aValue = spotLocations[x + y * 10];使用完指针后,记得释放()指针。
https://stackoverflow.com/questions/1834137
复制相似问题