多维数组指针的问题。

saywill 2014-11-10 09:35:32
学习多维数组的时候遇到这么个问题 :
请写出下列表达式的值 int[2][3]={1,2,3,4,5,6};
a[1][1]= ,
*(a[1]+1)= ;
**(a+1)= ;
(*(a+1))[1]= ;
前两个我能理解,都是指元素 5, 但是后两个不明白。 a+1是 元素4的地址, *(a+1)不是指元素4么, **(a+1)是什么意思?
最后 应该是5吧, 不应该表示 ((a+1))[1] 么? 对于指针不怎么明白。
希望能给详细解释一下,谢谢
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-11-11
  • 打赏
  • 举报
回复
对于一维数组, a是第一维指针 即 int[] a+n == a[n] 对于二给数组. a是第一维指针 int[] a+n == a[n] a[x]即第二维指针. a[x] +n == a[x][n] 其它类似.
saywill 2014-11-10
  • 打赏
  • 举报
回复
引用 3 楼 ForestDB 的回复:
对于后面两个不明白的,a+1并不是元素4的地址,或者说a+1并不是指向元素4;而是说a+1是int[3]的地址,或者说a+1指向的是{4, 5, 6},能想通这一点,就明白了。
"*p或者p[0]都算是解引用" 还有 “a+1指向的是{4, 5, 6}” 解释的很透彻, 非常感谢,明白了!
ForestDB 2014-11-10
  • 打赏
  • 举报
回复
对于后面两个不明白的,a+1并不是元素4的地址,或者说a+1并不是指向元素4;而是说a+1是int[3]的地址,或者说a+1指向的是{4, 5, 6},能想通这一点,就明白了。
ForestDB 2014-11-10
  • 打赏
  • 举报
回复
要理解这个,得有一定的抽象思考的能力。 首先第一点,没有多维数组,只有一维数组;所谓的多维,不过是一维的递归定义。 其次对于一维数组,其数组名是指向第0个元素的指针(在不够准确的上下文中),对其解引用(*p或者p[0]都算是解引用)得到第0个元素。 理解了上述两点之后,再来看: int a[2][3]={1,2,3,4,5,6}; 这里的a是一个一维数组,该数组有2个元素,元素类型为int[3]; 第0个int[3]是个一维数组,有3个元素,元素类型为int,值分别是1,2,3; 同理,第1个int[3]也是一个一维数组,值分别是4,5,6。 a[1][1] a[1],取a的第1个元素,即第1个int[3](记得它又是个数组); a[1][1],取a[1]的第1个元素,即5。 *(a[1]+1) 同上,对于一维数组,*p和p[0]是一回事,*(p + 1)和p[1]是一回事。 **(a+1) a指向数组的第0个元素,那么a + 1则指向数组的第1个元素,即第一个int[3]; *(a + 1)即对其解引用,得到第1个int[3],它是个数组; **(a + 1)对第1个int[3]解引用,即得到第1个int[3]的第0个元素,即4。 (*(a+1))[1] 同上*(a + 1)得到第1个int[3],然后[1]取该int[3]的第1个元素,即5。
saywill 2014-11-10
  • 打赏
  • 举报
回复
还是没想明白。。求解答

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧