先定义一个多维数组:
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。