> 文档中心 > 2021-05-27

2021-05-27

我是这样理解的:
我是这样理解的:就一个二维数组,它的每行都可看做是一个一维数组,比如:int a[2][3],如果把它的第一行都看作包含3个元素的一维数组话,我们可以定以一个int *p1指针指向这个二维数组的第一行,同样我们可以再定义一个int *p2指向第二行。为了方便,我们不妨把p1和p2这两个指针放在一个指针数组中即int *p[2],这样我们可以再定义一个二级指针int *q,指向这个int p[2],这样我们就可以通过指针很方便的访问这个二维数组中的每个元素了如果给一个二维数组动态分配行列数为m行、n列,可以这样:先分配行,再分配列。比如:m行、n列;先分配一个有m个元素的一维数组,数组的每个元素是个指针(即:int ),并且分别指向m行,再给每行分配nsizeof(int)就可以了。参考程序:#include #include int main(){int i,j;int peoplen,subjectn;int p=NULL;scanf("%d%d",&peoplen,&subjectn);p=(int )malloc(peoplensizeof(int));for(i=0;i<peoplen;i++){p[i]=(int )malloc(subjectnsizeof(int));}for(i=0;i<peoplen;i++){for(j=0;j<subjectn;j++){scanf("%d",&p[i][j]);}}for(i=0;i<peoplen;i++){for(j=0;j<subjectn;j++){printf("%5d",p[i][j]);}printf("\n");}for(i=0;i<peoplen;i++){free(p[i]);p[i]=NULL;}free§;p=NULL;return 0;}

QQ头像吧