码迷,mamicode.com
首页 > 其他好文 > 详细

申请并返回堆空间上的二维空间

时间:2015-09-04 21:06:06      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

二维空间和二维数组都有二维的逻辑,但是二维数组是连续的,二维空间不一定是连续的,我们可以申请连续的二维空间,也可以申请不连续的二维空间,下面来介绍两种申请并返回二维空间的方法:

申请并返回连续的二维空间,这个就是使用指针数组来管理连续的二维空间。

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int main(void)
 4 {
 5     int (*p)[5]=(int (*)[5])malloc(sizeof(int)*3*5);
 6     int i=0,j=0;
 7     for(i=0;i<3;i++)
 8         for(j=0;j<5;j++)
 9         {
10             p[i][j]=i*j;
11         }
12     for(i=0;i<3;i++)
13         for(j=0;j<5;j++)
14         {
15             printf("%d\t",p[i][j]);
16         }
17     return 0;
18 }

申请并返回不连续的二维空间,原理是先使用二级指针指向一个空间。,里面存储的全部是一级指针,再分别让这些一级指针指向一个一维空间,这样那个二级指针所指向的或者说所管理的就是二维空间。

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int **allocMem(int base, int row, int line)
 4 {
 5     int **p=(int **)calloc(sizeof(int *),row);
 6     int i=0;
 7     for(i=0;i<row;i++)
 8     {
 9         p[i]=(int *)calloc(line,base);
10     }
11     return p;
12 }
13 int main(void)
14 {
15     int base=sizeof(int);
16     int row=3,line=5;
17     int **p=allocMem(base,row,line);
18     int i=0,j=0;
19     int k=0;
20     for(i=0;i<row;i++)
21         for(j=0;j<line;j++)
22         {
23             p[i][j]=k++;
24         }
25     for(i=0;i<row;i++)
26         for(j=0;j<line;j++)
27         {
28             printf("%d\t",p[i][j]);
29         }
30     return 0;
31 }

 

申请并返回堆空间上的二维空间

标签:

原文地址:http://www.cnblogs.com/luojialin/p/4782311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!