繁体   English   中英

访问存储在1D数组中的2D数组中的对角线元素

[英]Access diagonal elements in a 2D array stored in a 1D array

假设我的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的大小为mxnb的大小为mn 使用单个for loop我希望能够访问所有对角线元素,即输出应为1 1 1 1。

我了解A[i][j] = B[i*n+j]; 但是如果我只使用一个for循环,则没有j index

任何帮助将不胜感激。

编辑:

注意,让m = n出于所有实际目的。 我正在使用的接口期望行和列大小有两个单独的变量。 但是我只处理平方矩阵。

如果您知道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]);
}

对于二维数组,这很简单。

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

您只需要考虑列数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM