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;
}
内存分析
1、先看第一条
printf("%s\n", **++cpp);
简化来看就是 *(*(++cpp))
cpp原本指向 cp 首元素地址,++cpp则指向cp[1]的地址,*(++cp)解引用得到cp[1],而cp[1]存放的是c+2,(c+2)是c[2]的地址。即 *(++cp) 指向 c[2]的地址,再次解引用*(*(++cp)) 就得到了c[2]中的内容,c[2]中存放的是字符串"POINT"的首元素地址。