C语言二维数组问题

问一下 定义一个二维数组a[2][3] 比如我想取a[1][2]的首地址 我知道用*(a+1)+2表示 我就是不明白 a本来就是地址了 a+1就是a[1][0]的首地址 为什么前面还要加个*之后再偏移 为什么(a+1)+2这样不对 谢谢了

一维数组,a表示的就是首元素的地址,*a就是首元素。
再看二维数组,二维数组如a[2][2];两行两列。是a[0][0],a[0][1],a[1][0],a[1][1],它不是一维数组,但可以用一维数组表示。
a+i=a[i]=*(a+i)=&a[i][0]这几个值是相等的,但意义不同,
a+i表示第i行的首地址,指向行。
a[i]=*(a+i)=&a[i][0]表示第i行第0列元素。
(a+1)表示第1行地址,给第一行地址加2?加法结合律也能得出(a+1)+2=a+3;能对吗
*(a+i)把行列都订好了,就在第i行第0列,比较明确,再加就知道是增加列。
这块还比较难点,都看看书,做做题追问

那么这个*(a+i)就是相当于一个指针 而不是a+1这个地址里面的内容 是这样吗

追答

不是这个地址中的内容,还是存放的地址,a+i表示的是一行地址的首地址,*(a+I)取内容是不是成了明确元素的位置啊,再取*才是内容

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-02
a是指针,a + 1是指针与整数相加,结果还是指针,绝不是普通整数,这个1有讲究,在32位CPU中,对于int类型数据,是1 * sizeof(int) = 4,这个4是字节数,在二维数组int a[2][3];中,这个1是
1 * 3 * sizeof(int),结果是12个字节。
在你的问题中,有int a[2][3];,*(a + 1) + 1等同于&a[1][1],a + 1等同于&a[1][0]。在二维数组中,一般用a[i][j]来存取数组元素,用指针则为*(*(a + i) + j),这些内容需要慢慢来理解,大家都有这个过程。追问

那么这个*(a+i)就是相当于一个指针 而不是a+1这个地址里面的内容 是这样吗

追答

a是二维数组名,是二维指针,*(a + i)则为一维指针,等同于a[i],简单的说,a[i]指向了二维数组a[M][N]的第i行。

本回答被提问者采纳
第2个回答  2014-01-02
a是2维数组,那么可以把a看作一个指针,但是其指向的元素是一个一维数组。
也就是说(a+1)指向了这个数组的第二行。

*(a+1)这时候,仍然是个指针,只不过这个指针指向的元素是一个×型元素(假设a是int型的2维数组,那么这个指针指向的就是一个int型元素),所以*(a+1)+2的结果就是a[1][2]的地址
相似回答
大家正在搜