2011-11-30 158 views
0

我目前使用下面的代碼來獲取元素的當前行和列在一個二維int數組的列:讓行/動態二維數組元素

const int num_rows = 5; 
const int num_columns = 7; 

int a[num_rows][num_columns]; 

int *p = &a[2][4]; 

int row = (p - &a[0][0])/num_columns; 
int col = (p - &a[row][0]); 

也能正常工作,但現在我需要更改代碼以將行數和列數作爲參數。據我所知,這意味着我需要動態創建二維數組:

int** ary = new int*[sizeX]; 

for(int i = 0; i < sizeX; ++i) 
    ary[i] = new int[sizeY]; 

如果我創建二維數組這樣,上面的代碼,找到行/列休息。我能做什麼?

回答

0
int *ary = new int [sizeX * sizeY]; // allocate memory for the 2d array 

for(int i = 0; i < sizeX; ++I) 
    for(j = 0; j < sizeY; ++j) 
      ary[i * sizeY + j] = 0; 

    // to get the value of collumn c and row r: use ary[c * sizeY + r]; 
+0

我認爲我可以讓它按照這種方式工作。這是一個更多的簿記,因爲它確實是一維陣列,但我想這是我的情況的最佳選擇。 – user987280

0
int row = (p - &a[0][0])/num_columns; 
int col = (p - &a[row][0]); 

這是遠離指針運算方式一個非常好的主意。不要這樣做!你基本上是減去指針並用num_columns除數,那個數字是隨機的。

如果您想要獲取元素的行/列,請一次在數組中搜索一個元素。

for(int row=0; row<num_rows; ++row) { 
    for(int column=0; column<num_columns; ++column) { 
     if (a[row][column] == element) { 
     // we got it! 
     } 
    } 
} 
+0

OP希望從指針'p'獲得'row''列,所以也許它應該是'if(a [row] + column == p)' – fefe

+0

OP想要2d數組變量的維數。這隻適用於'a'具有靜態維度。 –

+0

爲什麼這個數字是隨機的?指針之間的差異將給出所述指針之間的元素數量,併除以列中元素的數量將給出當前行,因爲整數除法將餘數截斷。我誤解了你的意思嗎? – user987280