1,静态二维数组存储结构是一段连续的内存,存储形式和以为数组一样。
类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为 bb[m*n]
使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组不过是系统做了 i*n+j运算来查找 i 行 j 列的元素。
有图可知,aa[1][0] 的地址与a[0]的地址相同。
int bb[9][9];
cout<<" &b[1]: "<<&bb[1]<<" &bb[1][0]: "<<&bb[1][0]<<endl;
数组名bb的值就是元素bb[0][0]的地址,bb只能算是指向变量的指针,也就是一级指针,
所以运算 int **p=bb; 会出错,
只能用一级行指针代替这个运算,如 int (*p)[9] =bb;
告诉行指针每行的长度,就能把一维数组当二维数组运算。
2,new出来的二维数组结构很明显,二级指针
int **aa= int *[9]; //创建9个一级指针元素的数组,
- for(int i =0; i<row; i++)
- {
- aa[i]=new int [column];
- }