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


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个一级指针元素的数组,

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值