最近在学习STM32的ADC和DMA多通道采集过程中有使用到二维数组,姑且记录一下以作备忘。
参考:http://c.biancheng.net/view/2022.html
举个例子就能很简单的说明了
创建一个M行N列的int数组,数组定义如下(例:M=3 N=5)
#define M 3
#define N 5
int arr[M][N];
给数组按顺序赋值
int (*p)[N] = arr;
for(int i=0; i<M*N; i++)
{
*(*p+i) = i+1; //按照数组在内存地址中的存储顺序依次赋值1~15
}
再将其按M行N列的格式打印出来
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
printf("%4d ", arr[i][j]);
if(j==N-1) printf("\n");
}
}
结果为
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
小结
抽象得看二维数组是一个矩阵,按照从左至右,从上到下的顺序存储数值,实际上在内存中是连续一片的
反过来说,将连续一片的内存数据读取为二维数组,如果要按照通常的理解方式来,就应当一行一行的读。再具体一点:要读取M组N个数据,第一次读的N个数据作为二维数组的第一行、第二次读N个数据作为数组的第二行,以此类推最终得到一个M行N列的数组。