关于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类型长度。