题目如下:
根据编程思考所打印出答案
源代码如下:
#include <stdio.h>
int main()
{
char* c[] = { "ENTER","NEW","POINT","FIRST" };
char** cp[] = { c + 3,c + 2,c + 1,c };
char*** cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *-- * ++cpp + 3);
printf("%s\n", *cpp[-2] + 3);
printf("%s\n", cpp[-1][-1] + 1);
return 0;
}
打印出来结果就为:
我们需要借助图形来帮助我们来更好理解这道题
如下图所示:
.
首先大体分析一下char *c,char**cp,char***cpp栈区位置依靠上图分析
char *c栈区中从上到下总共有四个栈区,依次被ENTER,NEW,POINT,FIRST所占据,依靠上图所示从上到下的指针分别为c,c+1,c+2,c+3。
char**cp栈区中从上到下总共有四个栈区’,依次被c+3,c+2,c+1,c所占据,在char**cp当中c+3,c+2,c+1,c都代表指针变量。
char***cpp=cp则只有一个栈区,被cpp所占据。
**++cpp分析
++cpp为cpp+1也就是cp+1,*++cpp就为cp中c+2中的值,也为c中c+2的地址,**++cpp则为POINT中P的值,随后打印P以及后面的值,遇到\0停止打印,则打印出来就是POINT。
*--*++cpp+3分析
*cpp【-2】+3分析
cpp【-1】【-1】+1分析
习题小结:
该题需要深刻理解个指针的位置,并借助栈区图形来进行分析,这样显的简单明了,本题可锻炼我们的画图动脑能力,手脑兼备,方能一气呵成!各个打印分析都可画出变化过后的栈区图,如有兴趣,则可下去自行一一打印出来,这样更能方便理解!