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);
c:指针数组,每个元素指向一个字符串,存放的是每个字符串首字母的地址,数组的每个元素是char*
cp:数组,每个元素是指向char*的(地址/)指针
cpp:是一个指向char**的指针,指向数组cp的首地址,通过cpp访问数组cp和数组c中的元素
**++cpp:++有副作用,会改变值,cpp存cp数组中第二个元素的地址,指向c+2,第一次解引用得到对象c+2,为c数组中“P”的地址,第二次解引用顺着地址找到指向的元素P,最后%s打印出从P开始往后的这一块内存空间里的东西POINT
*— —*++cpp+3:cpp在刚才的基础上又往后移一个单位,存放数组cp的第3个元素的地址,第一次解引用得到指向的内容c+1;得到c+1之后➖➖了,是内容c+1➖➖修改成了c,,也就是数组c中第一个元素的地址,再一次解引用找到数组c中第一个元素的内容,也就是E的地址,E的地址+3指向E,最后%s打印是ER
*cpp【-2】+3:*cpp【-2】🟰* *(cpp-2),cpp-2指向数组cpp中第一个元素的地址,第一次解引用得到内容c+3,即存放数组c中第4个元素的地址,再解引用找到指向的内容F的地址,F的地址+3指向S,最后%s打印是ST
cpp【-1】【-1】+1:cpp【-1】【-1】🟰*(*(cpp-1)-1)上一次的cpp不改变,cpp-1指向数组cp中第2个元素的地址,第一次解引用得到内容c+2,-1得到c+1,即存放数组c中第2个元素的地址,再解引用得到N的地址,N的地址+1指向E,最后%s打印的是EW