关于C指针遍历多维数组的问题

编程入门 行业动态 更新时间:2024-10-28 05:17:26
本文介绍了关于C指针遍历多维数组的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

问 题

先上代码----->

int i[2][3] = { {1,2,3} ,{4,5,6} }; int(*p)[3]; p = i; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) printf("%d \n",*(*(p+i)+j)); }

我明白把数组拆成了三个一维数组来访问 p+i 代表数组 i[0] i[1] i[2]可是最后取数值的时候为什么是((p+i)+j) 方式来取 不明白为什么地址是*(p+i)+jp+i 不一已经是一维数组的地址了么 *(p+i) 取地址的地址是什么意思?能有人回答下么。

解决方案

p是一个指向内含3个元素的一维数组的指针,*p就是代表这个一维组,*p[0],*p[1],*p[2]是数组的各个值,等价改成指针的写法:**p,*(*p+1),*(*p+2)。现在你将二维数组的首地址赋值给:p = i; 则:

i[0][0] 等价于 *p[0] i[1][0] 等价于 *(p+1)[0] 等价于 *(*(p+1)) i[1][1] 等价于 *(p+1)[1] 等价于 *(*(p+1) + 1)

这样的几个推导示范,不知道你能不能理解到。把握住这两点:

  • *p 存的也是指针(地址),就如同数组名一样

  • [] 操作等同于 * 操作

  • 更多推荐

    关于C指针遍历多维数组的问题

    本文发布于:2023-07-30 11:04:24,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1248828.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:多维   遍历   数组   指针

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!