关于二维数组、三维数组及多维数组的深度理解及其建立方法(为个人理解,经过实践验证)
关于一维数组大家并不陌生,原理很简单就是申请一块连续的存储空间,可是当多维数组与指针联系在一块的时候我们往往会出现迷茫,现在我来说一下我怎么理解的多维数组。
我认为多维数组只不过是通过申请多个指针数组的方法来表示一维数组的方法而已,本质上多维数组只有一块连续的空间用来存储数据,其余都为指针数组,通过指针数组来描述一维数组,从而表示成想要建立的多维数组。
也就是说X维数组的建立需要一个一维数组和(X-1)个指针数组,如:二维数组建立一个一维数组和一个指针数组;三维数组建立一个一维数组和两个指针数组;以此类推。
以建立二维数组,三维数组为例:
二维数组建立:
#include<iostream>
using namespace std;
int main()
{int a[9] = { 1,2,3,4,5,6,7,8,9 };//开辟一个一维数组
int* p[3]; //开辟一个指针数组
for (int i = 0; i < 3; i++)
p[i] = &a[3 * i]; //为指针数组赋值
for (int i = 0; i < 3; i++) //验证理论
for (int j=0; j < 3; j++)
cout << p[i][j]<<endl;//p[3][3]型
}
按照想法,建立一个一维数组, 建立一个指针数组,通过指针的指向从而表示出二维数组应该有的样子。
三维数组:
三维数组比较活跃,可以很简单改变其结构。如下:
p2[2][3][2]型:
#include<iostream>
using namespace std;
int main()
{
int a[12] = { 1,2,3,4,5,6,7,8 ,9,10,11,12 };//开辟一个数组空间
int* p1[6]; //开辟指针数组
int** p2[2]; //开辟二维指针数组
for (int i = 0; i < 6; i++) //为其赋值
p1[i] = &a[i * 2];
for (int i = 0; i < 2; i++)
p2[i] = &p1[i * 3];
for (int i = 0; i < 2; i++) //验证理论
for (int j = 0; j < 3; j++)
for (int n = 0; n < 2; n++)
cout << p2[i][j][n] << endl; //p2[2][3][2]型
}
p2[3][2][2]型:
#include<iostream>
using namespace std;
int main()
{
int a[12] = { 1,2,3,4,5,6,7,8 ,9,10,11,12 };//开辟一个数组空间
int* p1[6]; //开辟指针数组
int** p2[3]; //开辟二维指针数组
for (int i = 0; i < 6; i++) //为其赋值
p1[i] = &a[i * 2];
for (int i = 0; i < 3; i++)
p2[i] = &p1[i * 2];
for (int i = 0; i < 3; i++) //验证理论
for (int j = 0; j < 2; j++)
for (int n = 0; n < 2; n++)
cout << p2[i][j][n] << endl;//p2[3][2][2]型
}
如上是代码和结果。
那四维数组,五维数组也是如此。
综上可知多维数组本质上就是对一维数组的表示。
如有语言,语法错误还望海涵。