在C中定义一个动态的二维数组
一般来讲两种办法:
第一种:连续内存分配
#include "stdio.h" #include "stdlib.h" int main() { int x,y; int *p; scanf("%d%d",&x,&y); p=(int *)malloc(x*y*sizeof(int)); .....//这样定义要访问第i行第j列应该用*(p+i*y+j) free(p);//释放内存 return 0; }
第二种:通过指针数组+二级指针
#include "stdio.h" int main() { int x,y;//x行y列 int i,j; int **p; scanf("%d%d",&x,&y); p=(int **)malloc(x*sizeof(int*)); if(p==NULL)//分配失败 { //printf("内存分配失败!\n"); exit(0); } for(i=0;i<x;i++) { p[i]=(int *)malloc(y*sizeof(int)); if(p[i]==NULL)//分配失败 { //printf("内存分配失败!\n"); for(j=0;j<i;j++) //将之前分配好的内存释放掉 free(p[j]); free(p); exit(0); } } ........//访问第i行第j列:p[i][j] for(i=0;i<x;i++)//释放内存 free(p[i]); free(p); return 0; }