题目:
#include<stdio.h>
char *c[]={"Enter","New","Point","First"};char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
int main()
{
printf("%s\n",**++cpp);
printf("%s\n",*--*++cpp+3);
printf("%s\n",*cpp[-2]+3);
printf("%s\n",cpp[-1][-1]+1);}
解答:
**++cpp:(++cpp)就是&cp[1],就是&&c[2],所以第一行结果为Point,此时cpp已经变为&cp[1]
*--*++cpp+3:(++cpp)就是&cp[2],*++cpp就是c+1就是&c[1],--*++cpp就是&c[0],*--*++cpp就是c[0],*--*++cpp+3就是er
*cpp[-2]+3:这时cpp变为&cp[2],cpp[-2]就是&cp[0],*cpp[-2]就是cp[0],就是c+3就是&c[3],*cpp[-2]+3就是st
cpp[-1][-1]+1:这时cpp还是&cp[2],cpp[-1][-1]就是&cp[1][-1]就是c[1],cpp[-1][-1]+1就是ew
所以结果是:
Point
er
st
ew