C语言 二维数组 指针

C语言 二维数组 指针inta[4][2]中*(a+2)+1和*(*(a+2)+1)是不是都代表着a[2][1]的值啊 能不能特别说明一下*(a+2)+1

*(a+2)+1和*(*(a+2)+1)
这完全是两个东西。第二个代表a[2][1]
二维数组名代表的是这个数组首元素的地址或者可以看作二维数组第一行的地址,a+2是指向第三行的,二维数组可以看作是以行为数组名的一维数组比如
int a[2][2]
数组名是a[2]
在这里*(a+2)代表的是第三行首元素的地址,然后加1的话就是第3行第二元素的地址了。所以*(*(a+2)+1)代表a[2][1]追问

为什么会有*zippo+2啊 这是一个四乘2的数组 *zippo+2不是应该是第一行第三个元素嘛

追答

第二个啊。你想*zippo+1是第一行第二个。你都说它是4*2的了。第一行哪有第3个元素。

就是第二行第一个元素。行列是抽象出来的。在内存是线性排列的。

追问

如果是第二行第一个不应该是*(zippo+2)吗

追答

*(zippo+2)是第3行首元素地址,你看我前面说的

zippo+2是指向第三行的

追问

那这个数组总共有八个数 线性排列 那是不是也能有*zippo+7 也就是第四行第二个啊

追答

嗯最后一个

追问

谢谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-07
a是数组第一行地址,代表一行,偏移量是2*4.
*(a+2)是数组第二行第一列地址,偏移量是4
*(*(a+2)+1)代表a[2][1]的值追问

偏移量具体是什么意思 是大小嘛

相似回答