c++动态数组是如何建立和使用的_C/C++语言学习笔记(4)指向数组的指针,指向指针的指针与动态二维数组指针...

首先补充一下指针代数:

int 

程序输出3

若p是一个指针,m是一个整数,则p+m和p-m是有定义的。p+m表示的实际地址为p+m*size,size是p指向的数据类型的大小。

指针是没有乘除的,指针也不能和别的指针加减,即使看起来指针也是一个整数。若想要把它当成整数运算,需使用强制类型转换,如

int

这是语法正确的。

二维数组

二维数组的声明方式如下:

int 

5是行数,3是列数。索引数组元素时,行数可取0-4,列数可取0-2.这和一维数组一样。

下面来利用一维数组探究二维数组的实质。一维数组中,a[k]的实质就是*(a+k),是本来就知道的。

比如一个元素a[2][1],它其实可以被拆开来,拆成*(a[2]+1)

这样我们发现a[2]是一个指针。这说明数组a[]事实上是一个指针数组。一维数组a[]中的元素都是指针。

于是a=&(a[0])=&(&(a[0][0]))

a是一个指针的指针或者叫二级指针。

于是,这就是二维数组的实质:二维数组是一个二级指针经过两次解引用(解引用就是取*),结合适当的指针运算而形成的。

所以a[i][j]等价于*(*(a+i)+j)

了解了这些以后,就可以动态构建二维数组了。

首先应该构建一个一维的指针数组,元素个数是行数,然后对于其中的每一个(指针)元素,构建一个数组,数组元素个数是列数。

由于数组是动态的,可以将行数和列数设为变量。

#include

程序输出结果如下:

0 

可是程序里面忘了一件事情:在使用后释放内存。

释放内存的顺序应当和申请内存的顺序相反:先delete所有的a[i],再delete a.

只需要两行代码:

for

于是整个代码如下:

#include
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值