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

查看:90
本文介绍了关于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)+j
p+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)

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

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

  2. [] 操作等同于 * 操作

这篇关于关于C指针遍历多维数组的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆