一 概述
最近项目中用到二维数组,没想到用的时候出现了问题,找了好一会才发现原因。看来基本功还不扎实,有必要写篇博客好好理解下这二维数组。
二 动态创建
当你知道创建的是几行几列数组时,在c++ 中你可以用new
一条语句就能创建成相应的二维数组。
int **p = new int* [5];
但是在c语言中标准的库只有 malloc free是分配内存的,怎么分配呢?言归正传,下面介绍3中方法
1 利用二级指针申请一个二维数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
int **a;
int i,j;
//用二级指针动态申请二维数组 四行三列
int m = 4,n=3;
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++)
a[i]=(int*)malloc(sizeof(int)*n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("%p\n",&a[i][j]);
//输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续
for(i=0;i<m;i++)
free(a[i]);
free(a);
return 0;
}
这里创建的二维数组,每行的列与列之间的地址时连续的,但