用指针 调用二维数组里的元素 所用两个* 表示的意义

我想问一下 用指针 调用二维数组里的元素 所用两个* 表示的意义
像:*(*(a+i)+j) a为二维数组名 i和j都代表一个数
*(a+i)这里 的*所代表的意思是什么?
我是小白 , 求大神解答

第1个回答  推荐于2016-09-03
记住一个关键: 内存里没有二维数组,没有三维数组,只是一排带编号的格子
第二个关键:这排格子的属性只有两个:编号,内容
第三个关键:C 里面操作的对象只是数,编号、内容只是格子的属性或内存的属性,拿到这些编号、内容后对C来说只是数,至于是当做编号,还是内容就看程序员怎么用,用 * 就是把这个数当编号取格子里的内容,用&就是拿到这个格子的编号。

假设一下当前这排格子里的内容是
内容:1 4 6 8 9 10 11 12 13 14 0
编号:0 1 2 3 4 5 6 7 8 9 10
a在1

假如当前内存状态里指针a是编号是1的格子,里面放的内容也就是a的值是4,则 *a 就是取1号格子里的内容,也就是4,*(*a) 就是把 (*a)的值4当做地址,取编号为4的格子里的内容,也就是9。
这样,一个二级指针就出来了,再通过合理的规划这些格子里的内容什么样的数据结构都可以实现,包括这个简简单单的二维数组。
再拿上面的例子:
a:指向编号1的格子
a+1:编号1的格子的下一个格子就是编号2的格子
*(a+1):取编号为2的格子里内容 6
*(a+1)+1:上面的6号格子的下一个格子也就是编号7的格子
*(*(a+1)+1) :取7号格子里的内容12
这就是一个二维数组了,看上面的例子里,这段内存可以正确的理解为一个三行二列的二维数组
9 10
11 12
13 14追问

有一点不太理解既然*(a+1)是取编号2格子里的内容6 那*(a+1)+1不就是数字7吗? 怎么会是代表编号7?

本回答被提问者和网友采纳
相似回答