C语言里面二维树组的地址问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:09:31
数上说一个二维数组a[4][3]中a[0],a[1],a[2],a[3]可以表示数组a各行的首地址,也可以用a,a+1,a+2,a+3表示.
可是为什么又说数组中各元素的地址可以表示为*a,*a+1,*a+2/*(a+1),, *(a+1)+1.....
可是*是访问地址运算符,*作用在一个地址上就可以访问该地址的值,为什么这里*访问地址a确还成了各元素的地址??搞不懂了!!!
还是没有明白啊~谁能再说明白一点啊?

二楼说的很好,你多琢磨一下。
二维数组名表示的是数组的第0行的首地址。
二维数组可看作一种特殊的一维数组,它的每一个元素,又是一个一维数组。二维数组名表示的是数组的第0行的首地址。
所以说,a[2][3]=
a[0]……a[0][0] a[0][1] a[0][2] 这是第0行
a[1]……a[1][0] a[1][1] a[1][2] 这是第1行
注意这句话的表述:“a[0],a[1]可以表示数组a各行的首地址”,那么不难理解,a[0]对应的是a[0][0]
而*a对应的是第0行第0列元素的地址,而不是第0行第0列元素的值。为什么这样说呢。(注意,这是二维数组)
首先,a是二维数组中的第0行的首地址,而*a并不是“a单元的内容(值)”,因为a并不是一个变量的存储单元,所以不能求出它的值。
【重点在这里:】*a就是a[0],而a[0]是一个一维数组名,所以也是地址,它指向a[0][0]。即*a对应的是第0行第0列元素的地址。*(*a)或者**a才是得到a[0][0]的值。

a是二维数组的首地址,对a用*就是访问a[0]的值,而a[0]表示数组a第一行的行地址,所以*a+1就是元素a[0][1]的地址,要取其值就要这样表示*(*a+1)

这里*a就相当于a[0](或者a[0][0]),*a+1就相当于a[0][1],如果是*(a+1)就相当于a[1]了,a[3][2]的地址可以表示为*(a+3)+2,其值是*(*(a+3)+2)

以上是个人理解

//数组中各元素的地址可以表示为*a,*a+1,*a+2/*(a+1),, *(a+1)+1
因为在A[][]中的a表示是首地址,是一个指向指针的指针,通过一次*运算后,就成了指向第一维的指针了,也就是像a[1]这样的东西。

因此可以这么理解:二维数组诗存储一维数组的数组。
这么说明白了吗?

如果可以贴图的话就更好不过了。这个东西在图上说非常简单你可以自己画。