本文介绍了关于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指针遍历多维数组的问题
发布评论