如何定义一个动态的二维数组:
如何定义一个动态的二级指针,看似每个有点C语言基础的人觉得自己都可以很容易完成,但要正确的完成并且说的明白其中道理不见得就那么多。
*图解二维数组:
(ps:指针数组:即用于存储指针的数组,也就是数组元素都是指针。
int*a[4]; 1.指针数组
2.表示指向数组a的指针
3.元素表示(*a)[i]
数组指针:即指向数组的指针。
int(*p)[n];
1.p是一个指针,指向一个整形的一维数组,这个一维数组的长度是n。
如何将一个二维数组赋给一个指针:
int a[9][10];//一个二维数组
int (*p)[10];//定义一个数组指针,指向含10个元素的一维数组
p=a; //将该二维数组的首地址赋给p;也就是a[0]或a[0][0]
p++; //p++即p=p+1;也就是p跨过了a[0][ ]指向了a[1][ ]。)
两种定义二维数组的方式,访问数据的方式,优缺点:
方法一:
定义方式:
int **p=new int*[10];
for (int i=0;i<=10;++i)
{
p[i]=new int[10];
}
访问数据的方式:直接通过a[i][j]访问第i行第j列的数据。
优缺点:通过a[i][j]访问数据容易,但是new的次数太多,释放空间不容易。
方法二:
定义方式:
int *p=new int[10*10];(ps:这种事当成一维数组连续开辟的。)
*图例:(看&p[9]和&p[10]等地址相差为4个字节,即它们是相连的,所以为一维数组)
访问数据的方式:通过a[i*10+j]来访问第(i*10+j)个数据。
优缺点:访问数据很方便,且new的次数少,释放空间容易,但是不便于理解。