在objective-c中初始化并写入数组



在我的h文件中,我声明了一个var,稍后应该是一个数组:

@interface myClass : CCNode {
  CGPoint *mVertices;
}
@end

在我的init方法中:

mVertices = malloc(size * size * sizeof(CGPoint));
mVertices[0][0] = ccp(0,0);

在最后一行,我得到一个错误订阅的值既不是数组也不是指针。为什么我会出现这个错误,以及如何解决这个问题?

mVertices是一个指针,但您可以将其视为二维数组,这是不允许的(不过,您可以将它视为一维数组)。

在(Objective)-C中创建动态多维数组是很棘手的,因为编译器需要知道除第一个维度外的所有维度的大小,才能真正编译元素在内存中的位置。

但你可以自己计算:

mVertices[(row * size) + column] = ccp(row, column);

您可能需要为此定义一个宏:

#define VERTICE_ACCESS(row,colum) mVertices[(row * size) + column]

您的数组不是二维的。这只是一个顶点列表
如果你想在C中为动态二维数组分配空间,你可以这样做:

CGPoint** mVertices;
NSInteger nrows = 10;
NSInteger ncolumns = 5;
mVertices = calloc(sizeof(CGPoint*), nrows);
if(mVertices == NULL){NSLog(@"Not enough memory to allocate array.");}
for(NSUInteger i = 0; i < nrows; i++)
{
    mVertices[i] = calloc(sizeof(CGPoint), ncolumns);
    if(mVertices[i] == NULL){NSLog(@"Not enough memory to allocate array.");}
}
mVertices[0][5] = CGPointMake(12.0, 24.0);
mVertices[1][5] = CGPointMake(22.0, 24.0);
mVertices[2][5] = CGPointMake(32.0, 24.0);    
mVertices[2][1] = CGPointMake(32.0, 24.0);
for(NSUInteger i = 0; i < nrows; i++)
{
    for (int k = 0; k < ncolumns; k++) 
    {
        NSLog(@"Point %@", NSStringFromPoint(NSPointFromCGPoint(mVertices[i][k])));
    }
}

我使用calloc而不是malloc来获得用0.0初始化的CGPoints。

相关内容

  • 没有找到相关文章

最新更新