2012-05-01 97 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;