举例:int a[3][4]
先解释一下,我们都知道这里a代表二维数组的首地址,即a[0][0]的地址。
a+1代表第二行的首地址,即a[1][0]的地址,
a+2代表第三行的首地址,即a[2][0]的地址。
而*a代表第一行的首地址,即a[0][0]的地址,*a+1代表第二个元素的地址
*a+2代表第三个元素的地址
...
*a+11代表第十二个元素的地址
进而,*(a)+1或者*(a+0)+1就是a[0][1]的地址,而*(*(a+0)+1)就是a[0][1]
*(a+1)+1就是第二行第二个元素的地址,即a[1][1]的地址,而*(*(a+1)+1)就是元素a[1][1]
举一反三
对于a[1]就是第二行的首地址,a[2]就是第三行的地址,而a[1]+2就是第二行的第三个元素,即a[1][2]
那么*(a[1]+2)就是第二行第三个元素,即a[1][2]
到此,细心的你可能会发现,二维数组有行和列的区别,改变行: a或者*a,代表第一行首地址,同样a[0]代表的也是第一行的首地址;a+1或者*(a+1),代表第二行首地址,同样a[1]代表的也是第二行的首地址。改变列:*a+1代表第二个元素,也就是a[0][1]的地址。只有这样区别才不会混淆。
[
本帖最后由 fuqiyang 于 2012-2-23 18:38 编辑 ]