在c语言中,二维数组与指针之间中有着密切的关系。
一般来说,二维数组的表现形式为a[i][j],而在指针中,与这个表现形式相同的指针形式为*(*(a+i)+j);
为什么要这么表示呢?
首先我们理解二维数组,二维数组就是一个平面,里面有很多小格子,格子里面可以储存元素,一般都是按行按列顺序排放。我们不妨转化一个角度来看:二维数组就是一维数组。为什么这么说呢?
实际上,二维数组就是有多个一维数组组件而成的,把二维数组看作一维数组,一维数组里面的每一个元素,恰好又是一个一维数组
(电脑绘图太难了呜呜呜,将就着看吧)
然后我们从一维数组的方式去理解指针,一维数组一般a[n],指针上表示通常为*a,那么,一维数组里面元素的地址,我们该如何去表示呢?这时的表示方法就应该为*a[i]+j,也可以表示为a[i]+j,这时,我们要取出里面的元素,就应该为*(*(a+i)+j);这时我们要把“a[i]”这个指针,要当作列来看,第i个就是所谓的第i行的元素,加上j后,就是在第i行的基础上,在偏移j个字节单位(看类型),这样我们就可以得到第i行第j列的元素了。这个时候,二维数组的运算法则就可以运用到指针上面来了;