【发布时间】:2012-01-07 00:49:34
【问题描述】:
我想在 Objective-C 中实现这样的目标
+(int[10][10])returnArray
{
int array[10][10];
return array;
}
但是,这会产生“数组初始化程序必须是初始化程序列表”编译器错误。这有可能吗?
【问题讨论】:
标签: objective-c c
我想在 Objective-C 中实现这样的目标
+(int[10][10])returnArray
{
int array[10][10];
return array;
}
但是,这会产生“数组初始化程序必须是初始化程序列表”编译器错误。这有可能吗?
【问题讨论】:
标签: objective-c c
您不能在 C 或 Objective-C 中返回一个数组(任何维度的)。由于数组不是左值,因此您无法将返回值分配给变量,因此发生这种事情没有任何意义。但是,您可以解决它。你需要返回一个指针,或者使用一个技巧,比如将你的数组放入一个结构中:
// return a pointer
+(int (*)[10][10])returnArray
{
int (*array)[10][10] = malloc(10 * 10 * sizeof(int));
return array;
}
// return a structure
struct array {
int array[10][10];
};
+(struct array)returnArray
{
struct array array;
return array;
}
【讨论】:
array。如果您认为它令人困惑,我会清理它。
int i = array[0][1] 时,我得到“下标值不是数组、指针或向量”
int i = array.array[0][1] 应该为你做。
使用 Objective C++ 的另一种方法是声明数组,如下所示:
@interface Hills : NSObject
{
@public
CGPoint hillVertices[kMaxHillVertices];
}
这意味着该数组由 Hills 类实例拥有 - 即当该类拥有时它会消失。然后,您可以按如下方式从另一个类访问:
_hills->hillVertices
我更喜欢 Carl Norum 所描述的技术,但希望将此作为在某些情况下可能有用的选项提供 - 例如,将数据从构建器类传递到 OpenGL。
【讨论】: