标签:
#include <iostream> #include <cstring> using namespace std; char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main(void) { printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]); return 0; } //下面是题的解析 #include <iostream> #include <cstring> using namespace std; char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main(void) { printf("%s", **++cpp); //++cpp (这个其实就相当于 cpp =cpp+1)这里可以理解为相当于cpp+1,加上第一个*就是*(cpp+1) 就是cp[1] 就是c+2 //再加上第二*就是*(c+2) 就是c[2] 所以输出POINT //注意cpp改变了 printf("%s", *--*++cpp+3); //此处一定注意前边的cpp已经被改变了此时cpp指向cp[1]加上第一个*就是cp[1]的值 //此时再++就相当于cp[2] 下来再-- 就是相当于 c+1-1就是c再*就是c[0],再+3就是从第四(0,1,2,3所以第四个)个字母开始 //所以输出ER //注意cpp改变了 printf("%s", *cpp[-2]+3); //现在可以改写一下 就是* *(cpp-2) +3 此时cpp指向cp[2] 所以-2就是指向cp[0] //再*就是cp[0] 也就是c+3 再*就是c[3], 再+3就是从第四(0,1,2,3所以第四个)个字母开始 //所以输出ST //注意cpp没有改变 printf("%s\n", cpp[-1][-1]); //改写 cpp[-1] 也就是*(cpp-1) 此时cpp指向 cp[2]所以减一后指向cp[1] //(c+2)[-1]+1 //再改写 *(cp+2 -1) +1 就是 *(cp+1)+1 就是 c[1]+1 就是从c[1]的第二(0,1所以第二个字母)开始 return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/kai8wei/article/details/47364019