1,静态二维数组存储结构是一段连续的内存,存储形式和以为数组一样。

类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为  bb[m*n]  

使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组不过是系统做了 i*n+j运算来查找  i 行 j 列的元素。

C++ 静态二维数组与new出来的动态二维数组,存储结构的差别

有图可知,aa[1][0] 的地址与a[0]的地址相同。

int bb[9][9];
cout<<" &b[1]: "<<&bb[1]<<" &bb[1][0]: "<<&bb[1][0]<<endl;

C++ 静态二维数组与new出来的动态二维数组,存储结构的差别

数组名bb的值就是元素bb[0][0]的地址,bb只能算是指向变量的指针,也就是一级指针,

所以运算  int **p=bb; 会出错,

只能用一级行指针代替这个运算,如   int (*p)[9] =bb;

告诉行指针每行的长度,就能把一维数组当二维数组运算。


2,new出来的二维数组结构很明显,二级指针

int  **aa= int *[9];  //创建9个一级指针元素的数组,

  1.    for(int i =0; i<row; i++)  
  2.     {  
  3.         aa[i]=new int [column];  
  4.     }  
然后再给每个行指针变量赋值。



相关文章: