当我第一眼看到这道题,内心是崩溃的,怎么会有这么复杂的题目,但是细心研究,自有门道。
做这道题,首先应对指针数组,二级指针,三级指针有一定的了解,我的一篇文章《总结C语言指针部分的知识》里有提到。
首先,来看看结果:
以下是我的思路:此题可画图来分析:
这个题的指向关系就是这样,通过画图解决,很明确:
1.printf("%s\n", **++cpp);
cpp指向cp的首地址,++cpp则指向cp的第二个的地址,然后解引用,可以访问到“POINT”的首地址,所以输出:POINT
2.printf("%s\n", *--*++cpp+3);
cpp继续前置++,那么cpp此时指向cp的第三个的地址,解引用,指向“”NEW“的首地址,”在自减解引用,得到“”ENTER“”的首地址,再+3,则指向E,所以输出ER
第三个和第四个,相同的思路:
3.printf("%s\n", *cpp[-2]+3);
4.printf("%s\n", cpp[-1][-1]+1);