假设我的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 n
而b
的大小为mn
。
使用单个for loop
我希望能够访问所有对角线元素,即输出应为1 1 1 1.
我理解A[i][j] = B[i*n+j];
但如果我只使用一个for循环,那么我就没有j index
。
任何帮助都将受到高度赞赏。
编辑:
注意让m = n用于所有实际目的。我使用的接口需要两个独立的行和列大小变量。但我只使用方形矩阵。
答案 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]);
}