二维空间和二维数组都有二维的逻辑,但是二维数组是连续的,二维空间不一定是连续的,我们可以申请连续的二维空间,也可以申请不连续的二维空间,下面来介绍两种申请并返回二维空间的方法:
申请并返回连续的二维空间,这个就是使用指针数组来管理连续的二维空间。
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 }
时间: 2024-10-19 10:02:54