今天做了道关于指针的题目,感觉还是比较绕的,所以来总结一下叭!!!
题目
给定以下的二级指针与三级指针,请判断输出的结果是什么?
const char*a[] = { "BEIJING","SHENZHEN","SHANGHAI","GUANGZHOU" };
const char**pa[] = { a + 3,a + 2,a + 1,a };
const char***ppa = pa;
printf("%s , ", **++ppa);
printf("%s , ", *--*++ppa + 3);
printf("%s , ", *ppa[-2] + 3);
printf("%s , ", ppa[-1][-1] + 1);
你看懂了吗,程序的输出结果如下图,看看你自己做对了没有
分析
首先,根据所给定的条件我们来画图看看吧:
在 C 语言认识阶段我们应该知道 ,一级指针需要用二级指针来进行接收,二级指针用三级指针来接受,比如我们举个栗子:
int a=10;
int* p=&a;
int **pp=&p;
通过这个栗子,我们回到我们的题中来看看元素的指向:
(1)**++ppa
(2)*–* ++ppa + 3
(3) *ppa[-2] + 3
(4)ppa[-1][-1] + 1
ps:
注意理解多级指针,再联系此类题目时候一定要自己画画图来促进理解,注意指针的指向以及 自增自减是会改变变量自身存储的值的哦~~
加油加油!