2017-06-06 67 views
1

假設我的2D陣列是:訪問對角線元素

int a[4][4] = { 
       1,0,0,0, 
       0,1,0,0, 
       0,0,1,0, 
       0,0,0,1 
       }; 

假設其存儲在一維數組作爲:

int b[16]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; 

一般而言,假設a是尺寸爲m x nb的尺寸爲mn。 使用單一for loop我希望能夠訪問所有的對角線元素,即輸出應爲1 1 1 1

我明白A[i][j] = B[i*n+j];但如果我只使用一個for循環,我沒有一個j index

任何幫助將不勝感激。

編輯:

注意讓m = n用於所有實際目的。我使用的接口需要兩個單獨的行和列大小的變量。但我只用方矩陣工作。

+2

在對角線'i = j'。順便說一句,當'm!= n'時對角線是什麼? –

回答

3

如果你知道你的二維數組是一個完美的平方(即完全一樣多的行,列),你不需要j指數:

作爲一個二維數組:

for(i = 0; i < height; i++) 
{ 
    printf("%d\n", array[i][i]; 
} 

作爲一維數組:

for(i = 0; i < height; i++) 
{ 
    printf("%d\n", array[i*height+i]); 
} 
2

它對於二維數組很簡單。對於單維數組來說,它也不難。

for(int i=0; i<16; i=i+5) 
    printf("%d", b[i]); 
+1

有問題的陣列是1D –

+0

編輯我的答案也包括一維數組。 – VHS

+0

它仍然是一個二維數組 –

1

你只needto考慮列數。

#define COLUMNS 4 
#define ROWS 4 

b[16]={1,0,0,0, 
     0,1,0,0, 
     0,0,1,0, 
     0,0,0,1}; 

int i = 0; 
for(; i < ROWS; i++){ 
    printf("%d\t",b[COLUMNS*i+i]); 
}