关于C语音二维数组的进一步理解

最近又探究了c语言中的二维数组。又有了新的收获。所有mark一下。

       一维数组还好理解,二维数组实质就是一维数组,然而其单位不是C语言中基本的类型了,而是一个一维数组。那么三维数组可以理解为一位数组其单位为二维数组。

然而我们关心数组的三个要素:数组名(地址) ,步长(它的单位的长度), 范围(0-n  与首地址偏移的量)。

先看下面的列子慢慢体会。



可以看出int a[3][4] ,其实质就是int[4] a[3] .其类型可以认为是int[4]类型。 也就是其成员是一个一维数组,而一维数组类型为int型。

a存放的就是整个数组的地址,a[0] ,a[0][0] 与我们数组的地址偏移量都为0。所以他们的地址都是同一个值。

a+1 可以理解就是地址偏移一个补偿,而二维数组的一个步长可以理解为其成员一维数组的长度 int[4]型 4*4个长度

同理&a[0]+1 解释如上a+1。但是注意到a[0[0]的成员类型为int所以一次偏移为4个长度


a[1]其实就是 a中有三个元素a0  a1  a2,其类型为int[4]类型

要注意的是&a[0]+1 和a[0]+1有很大的区别,这里我也经常混。

理解上是&a[0]+1在int[4]类型整体上偏移地址(偏移一个量偏移一行长度),而a[0]+1 在其内部第a[0]个一维数组内部偏移一个int类型长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值