c语言将二维数组当做一维数组传入函数,并能输出原二维数组的各元素,怎样理解?
二维数组是连续存放的,可以当作一维数组
#include <stdio.h>
void printarr(int * arr, int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[i * n + j]);
}
printf("\n");
}
}
int main()
{
int arr[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
printarr(&arr[0][0], 3, 2);
return 0;
}
二维数组是逻辑意义上的二维,物理意义上的一维(并不严谨)。
例如:int a[5][8];,那么你可以首先看作一个大的数组:a[5],那么里面的元素如何呢?每一个元素都是一个长度为8的数组。当然这是逻辑意义上的。物理意义上可以这么理解:
|00000000|00000000|00000000|00000000|00000000|
其中0是每一个int单元,每一个|00000000|代表了一个大的包含有8个int的单元。我也是小白,这个是我自己理解的,不太严谨。