#include <stdio.h>
int main()
{
char *c[]={"ENTER","NEW","POINT","FIRST"};
char **cp[]={c+3,c+2,c+1,c};//三级指针
char ***cpp=cp;//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;
}首先先看题目第一项**++cpp,首先先执行++cpp,这时,*cpp值是c+2。其次执行**cpp。
当执行*(--(*(++cpp)))时,先执行++cpp,这时*cpp的值是c+1。而后执行--操作,c+1-1=c(但CP仍然指向原来c+1的位置),而后取*操作,此时值为"ENTER"的首地址,而后其地址加3,最后就是ER!
而后cpp[-2]=*(cpp-2)=c+3,所以*cpp[-2]即为“FIRST”的首地址,再加3,最后就是ST!
cpp[-1][-1]=*(*(cpp-1)-1)=*(c+2-1)=*(c+1)="NEW"的首地址,而后加1,最后就是EW!