#include <stdio.h>
#include <malloc.h>
int** malloc2D(int row,int col)
{
int** ret = (int**)malloc(col*sizeof(int*));
int* p = (int*)malloc(col*row*sizeof(int));
int i = 0;
if((ret!=NULL)&&(p!=NULL))
{
for(i=0;i<row;i++)
{
ret[i] = p + col * i;
}
}
else
{
free(p);
free(ret);
p = NULL;
ret = NULL;
}
return ret;
}
void free2D(int** a)
{
free(a[0]); //free(&a[0][0]),即把p给free掉
free(a); //free掉ret申请的空间
}
int main(void)
{
int** _2DArray = (int**)malloc2D(3,4);
int i = 0;
int j = 0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
_2DArray[i][j] = i + j;
}
}
printf("one idea to print the 2D array...\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d\n",*(*(_2DArray+i)+j));
}
}
printf("another idea to print the 2D array...\n");
int* p = &_2DArray[0][0];
for(i=0;i<12;i++)
{
printf("%d\n",p[i]);
}
free2D(_2DArray);
printf("---end---\n");
return 0;
}
动态申请二维数组的方式和遍历二维数组的两种方式
最新推荐文章于 2022-06-06 16:52:33 发布