二维数组及以上维度的数组,本质是一维数组?(C语言)
?? 任意高纬度的数组,本质都是可以转为为一维数组来看待。
示例如下:
#include <stdio.h>
void PrintMap(int *map)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
printf("%4d", map[i * 10 + j]);
}
printf("\n");
}
}
int main()
{
int map[10][10]=
{
{1,1,2,2,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10},
{16,4,2,41,4,5,6,7,8,10}
};
PrintMap(map);
return 0;
}
运行结果:

??二维数组转一维数组的公示为:当前行 * 总列数 + 当前列。
??跟高维度的数组也可以通过类似的公式转化为一维数组。
??其实以上实例中PrintMap函数形参记录的是二维数组的头地址,而我们知道,数组在申请内存空间的时候是线性开辟内存的(顺序存储)。实际上不管是几位数组,编译器在申请内存空间的时候,都是线性申请分配的。比如我们申请的是10*10的二维数组,实际上在内存空间上就是一个100*sizeof(数据类型)字节大小的内存空间,即本质就是100*sizeof(数据类型)字节大小的一维数组。
|