复杂的三级指针问题

来源:互联网 发布:手机英语口语交流软件 编辑:程序博客网 时间:2024/05/25 16:37

 三级指针,真是难见,今天 在CSDN上看到了, 是别人发问的。问题如下:
 #include "stdio.h"
  
  char*c[]={"ENTER","NEW","POINT","FIRST"};
  char **cp[]={c+3,c+2,c+1,c};
  char ***cpp=cp;

  main()
  {

   printf("%s",**++cpp);
   printf("%s",*--*++cpp+3);
   printf("%s",*cpp[-2]+3);
   printf("%s\n",cpp[-1][-1]+1);
  }

  输出结果是POINTER STEW 希望高手给出解释,THANK YOU !

我的解释:
step 1
**++cpp 
cpp->cp[0]->c+3  ==> cpp==++cpp->cp[1]->c+2->"POINT"==> *++cpp->"POINT"  ==> **++cpp=="POINT"

step 2
*--*++cpp+3
from step1 -->conclusion: cpp->c+2
++cpp==cpp->c+1 ==> *++cpp==*(c+1)->c[1] ==> --(*++cpp)->c[0] ==>*(--(*++cpp))=="ENTER"  ==> *(--(*++cpp))+3->"ER"

step 3
*cpp[-2]+3
the same from step 2,conclusion:cpp->c+1
cpp[-2]->cp[0] ==> *cpp[-2]->(c+3) =="FIRST"  ==> *cpp[-2]+3==(c+3)+3->"ST"

step 4
cpp[-1][-1]+1
the same from step 2,conclusion:cpp->c+1
cpp[-1]->cp[1] (->c+2) ==>cpp[-1][-1]->c+1 (->"NEW") ==> (cpp[-1][-1]+1)->"EW"

conclusion:POINTER STEW

 

参考:http://sysuor.blog.163.com/blog/static/8620131200832051039568/

原创粉丝点击