![](/img/trans.png)
[英]How to access the elements of a 2D array represented by a Double pointer as a 1D array in C
[英]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
的大小为mxn
, b
的大小为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.