#include<stdio.h>
int main()
{
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);
return 0;
}
把插char* 、char**、char*** 画成图,比较容易理解。
c是一个指针数组,里面存放的元素都是char*类型。
cp是一个二级指针,把c中的元素放在cp中。
cpp是一个三级指针,cpp指向cp的首元素地址。
**++p
*-- *++cpp + 3
*cpp[-2] + 3
这个*cpp[-2] 可能有一些同学不太懂,我们可以把*cpp[-2] 理解为*(cpp - 2),两者是等价的。
cpp[-1][-1] + 1
这里的cpp[-1][-1] 是同样的道理,与*(*(cpp - 1) - 1) 是等价的
那么把图画出来了,就很好理解了,答案也就随之出来了。