访问存储在一维数组中的二维数组中的对角线元素

时间:2017-06-06 15:06:09

标签: c arrays matrix

假设我的2D数组是:

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

假设它以1D数组存储为:

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用于所有实际目的。我使用的接口需要两个独立的行和列大小变量。但我只使用方形矩阵。

3 个答案:

答案 0 :(得分:3)

如果您知道您的2D数组是一个完美的正方形(即与列完全一样多的行),那么您不需要j索引:

作为2D数组:

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]);
}

答案 1 :(得分:2)

对于二维阵列来说,它很简单。

for(int i=0; i<4; i++)
   printf("%d", a[i][i]);

对于单维数组,也不难。

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

答案 2 :(得分:1)

您只需要考虑列数。

#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]);
}