#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);
system("pause");
return 0;
}
1.先创建一个数组c,里面存放的是元素的首字母,每个元素都是char*。
2.数组cp用来接收数组c里面的元素,用char**接收。
3.创建一个数组用来接收cpp里面的元素,用char***接受。
4.cpp+0指的是cp数组里第一个元素,+1指的是cp数组里第二个元素的地址,解引用后是第二个元素的内容,cp数组里第二个元素在c数组里指的是元素首元素的地址,则第一个printf输出的是point。
5. –++cpp + 3 由于“+”优先级较低,所以程序先执行*–++cpp代码,这段代码先执行++cpp,再执行++cpp,再执行–++cpp,再执行–++cpp,最后再+3.打印的是ER
6. cpp[-2] + 3 cpp[-2]可以转化为(cpp-2),先对cpp-2后,指的是cp数组的首元素地址,而c+3指向的是c数组的第三个元素,解引用之后,取的是第三个元素的首元素地址,再加三是第三个元素的地址,从此处开始打印。打印的是ST
7.cpp[-1][-1] + 1 先转化:cpp[-1][-1] + 1–>(*(cpp - 1) - 1)+1. 打印的是EW
8.最后输出程序结果: