您的位置:首页 > 其它

关于多维数组动态开辟空间的一些疑问

2016-03-16 16:16 260 查看
关于多维数组动态开辟空间的一些疑问

核心思想:将多维数组抽象成一维的数组。

例如二维数组可以当作一维数组,数组的每一个元素都是一个一维数组,也就是说抽象后的一维数组的每个元素都是一个一维数组的首地址,三维数组也可以抽象成一个一维数组,数组的每个元素也都是一个二维数组的首地址,四维数组及多维数组以此类推...


举个举个例子:int arr[3][4][5]; 等价于 int **pArr[3],
当然你可以理解为指针数组,他的含义是pArr是一个一维数组,总共3个元素,每一个元素是一个二级指针,也就是二维数组的首地址。那么,

下面先回顾一下一维数组开辟空间:int a[2]; 那么,int *pA = (int *)malloc(2
* sizeof(int)); 详细解释一下:此事开辟的是2个整形元素的存储空间。(int -> int *)

那么对于以上抽象后的一维数组,现在需要开辟的空间是3个 二维数组的首地址所在的存储空间,(这里简单说一下:int
a, a的首地址什么类型呢? int* 没问题吧, 那int a[2],此时a的首地址类型为int **; int a[2][3],此时a的首地址类型为int ***;
)所以如何开辟呢?

int ***pArr = (int ***)malloc(3 * sizeof(int **)); 那么此时抽象后的一维数组的空间已经分配好了。下面开始分配3个元素的内存空间,这三个元素为三个二维数组,而我们刚刚分配了元素本身的空间,而元素本身的空间即就是他(指针本身的空间,注:指针有两块空间,一块是指向的空间,
另外一块是指针本身的空间), 那么现在开始给每个元素分配内存,

继续以上过程:

for(int i=0; i<3; ++i)

{

**pArr = (int **)malloc(4 * sizeof(int **));

for(int j=0; i<4; ++j)

{

*pArr
= (int *)malloc(5 * sizeof(int *));

}

}

那么此时空间就分配好了, 基本思路就是:由外而内
,一次分配内存,这样子更好理解...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: