另类理解多维数组和数组指针

发布于:2023-02-11 ⋅ 阅读:(654) ⋅ 点赞:(0)

先定义一个多维数组:

char arr[4][3][2]=           //定义了一个三维数组

{                                    //0        //1        //2            //竖为行,横为列 

                                      //0 //1 //0 //1 //0//1                   

                           //0     {{'a','b'},{'c','d'},{'e','f'}},

                           //1     {{'g','h'},{'i','j'},{'k','l'}},

                           //2     {{'m','n'},{'o','p'},{'q','r'}},                //‘r’=arr【2】【2】【1】

                           //3   {{'s','t'},{'u','v'},{'w','x'}}

}

char (*pa)[2]=&arr[1][0];                //二级指针

char (*ppa)[3][2]=&arr[1];                //三级指针

分别通过两个指针访问数组中‘r’元素

此函数为arr【4】【3】【2】,那么可以把每一维看作其中数的进制,比如在一维中为二进制,逢2进1,二维中逢3进1,三维中逢4进1;理解后,我们定义一个数组为brr【i】【j】【k】,那么在这个数组中一维就是逢k进1,二维就是逢j进1,三维就是逢i进1;现在我们来看指针如何访问元素,元素r在数组中为arr【2】【2】【1】,先看指针pa,pa中保存arr【1】【0】的地址,若不够三维则补【0】,如pa补齐为arr【1】【0】【0】,此时pa地址小于r,则用arr【2】【2】【1】减arr【1】【0】【0】,为arr【1】【2】【1】,那么用指针推元素为arr【1】【0】【0】加arr【1】【2】【1】,因为pa本是二维指针,只是我们在运算的时候需要补齐,所以应该第三维化到第二维来,还记得我们二维是逢3进1吧,那么退回来则为arr【0】【5】【1】,用指针访问元素为*(*(pa+5)+1),//*在这里为解地址,pa为二级指针,解一次到一维,解两次得到值;再看,三维arr【1】【2】【1】退到二维为arr【0】【5】【1】,我们是否能退到一维,当然能,还记得一维是逢2进一吧,那么一维为arr【0】【0】【11】,此时用pa来访问值为*(*(pa)+11)。

下课!

别急,还有课后作业思考一用指针ppa来访问元素r。


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章