0

我想从一个函数创建一个数组。以下显然有效,但是因为我的数组更大,我想节省空间和写出它们的时间。

GLfloat gCubeTextureData_floorj[2] = { 1.0, 1.0 };

在我尝试从函数创建数组时,我收到“数组初始值设定项必须是初始值设定项列表”的错误。但是我通过返回列表来初始化数组。这是我的函数调用:

 GLfloat array[2] = [self createCubeTextureFromX1:0.5f toX2:1.0f toY1:0.0f andY2:0.5f];

我已经尝试了以下功能:

-(GLfloat[2]) createCubeTextureFromX1:(float)x1 toX2:(float)x2 toY1:(float)y1 andY2:(float)y2 {
    GLfloat gCubeTextureData_floorj[2] = { 1.0, 1.0 };
    return gCubeTextureData_floorj;
}

我试过了

-(GLfloat[2]) createCubeTextureFromX1:(float)x1 toX2:(float)x2 toY1:(float)y1 andY2:(float)y2 {
    return { 1.0, 1.0 };
}

而这两个都不起作用。第一个给我函数中的错误,第二个给我函数调用的错误。这可能吗?

4

3 回答 3

1

在 C 中,数组通常使用指针返回。

要在 Objective-C 中正确执行此操作,我建议从您的方法中返回一个 NSArray。

但是,GLFloats 不是可以存储在 NSArray 目录中的原生 Objective-C 对象。为了解决这个问题,我建议使用 NSNumber 或 NSValue 对象来包含您的 GLfloat 值。

于 2013-05-15T18:23:48.333 回答
1

无法从函数、方法、$whatever 初始化 C 数组。它只能使用初始化列表进行初始化。ISO/IEC 9899:TC3, § 6.7.8, 16. “否则,具有聚合或联合类型的对象的初始化程序应为元素或命名成员的初始化程序的括号括起来的列表。”

你可以做什么:

使用指针代替 C 数组。在创建函数或方法中堆分配一个数组并返回该数组的指针。调用者负责释放它。

于 2013-05-15T18:24:56.850 回答
0

为什么不是 C99 复合文字?

- (float[2])fooX:(float)x andY:(float)y
{
    return (float[2]){ x, y };
}
于 2013-05-15T18:45:33.957 回答