2012-05-01 62 views
0

我试图在使用常规c的目标c项目中创建一个二维数组,但它不能正常工作。C/Objective-C中的二维数组

首先我在ViewController.h接口文件中声明这一点...

int selectedItemsInt; 

这是2-d,我打算使用。接下来,我创建数组中的onload我...方法

selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}, 
           {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}}; 

这是一个巨大的2-d阵列,我从中得到了两个错误...

Expected expression &AND& Subscripted value is not an array, pointer, or vector 

我把一个int中该阵列的前面,但我想访问和编辑阵列在我的代码进一步下跌...

int index = selectedItemsInt [y][row]; //y and row are ints 

,甚至与代码我得到同样的错误...

Subscripted value is not an array, pointer, or vector 

任何帮助表示赞赏!

回答

3

您需要声明selectredItemsInt作为一个二维数组:

int selectedItemsInt [36] [11]; 

然后填满它动态地在onload(除非你知道在声明时的值):

for (int i=0; i<36; ++i) { 
    for (int j=0; j<11; ++j) { 
    selectedItemsInt[i][j] = ...; 
    } 
} 

如果你知道在申报时的数值,你可以一次申报并初始化数组:

int selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1}, ...}; 

注意的是,这里的第一个维度可能是多余的:如果你提供的初始值的正确数量,你可以这样做:如果您提供两个维度,并列出值

int selectedItemsInt [] [11] = {{1,1,1,1,1,1,1,1,1,1,1}, ...}; 

,但上市数量值小于声明的维数,数组的末尾将被初始化

0

你应该与此内容初始化它,不只是声明为INT第一:

int selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}}; 

您声明selectedItemsIntint,然后当你以为你初始化数组,你竟然试图下标一个int(当然这是不允许的)。

0

Objective-C是C的一个严格超集。在C中的工作也将在Objective-C中工作。

您正在将该变量声明为单个int,但稍后再设置其内容。可以立即设置内容以将其声明为int的固定大小数组或将其声明为指向int的指针(可用作数组)int *selectedItemsInt;