(1) ++比*的优先级高,所以先++,cpp是二级指针,++cpp表示cp+2是cp指针向后移动两次,指向c+2,c+2表示"POINT",所以(1)输出的是POINT(两次解引用结果是C的值)
(2) 经过(1)后cpp指向cp的c+2,也就是cp+1的位置,经过++cpp就是cp+2的位置,(从这里开始cpp的位置就不变了)cpp指针解引用为cp的c+1,c+1就是指针 指向c中的"NEW",指针cp--就是指向"ENTER",cp解引用后就表示"ENTER",再+3,就是向后移动3个字符,输出结果是"ER"
(3) 经过(2)后,cpp目前指向cp 的c+1的位置,*cpp[-2]=**(cpp-2);(cpp指针不移动,只是取值)-2就表示cpp取得当前位置向前两个位置的地址,并第一次解引用结果是c+3,也就是cp指向的"FIRST",再解引用就是"FIRST"这个字符串本身,最后在+3,表示向后三个字符,输出"ST"
(4) cpp目前还是指向c+1的位置,cpp[-1][-1]=*(*(cpp-1)-1);先计算*(cpp-1)的值,是c+2的值表示cp指针指向c的 "POINT",然后再计算-1,解引用,表示"NEW"本身,最后再+1,表示向后移动一个字符,输出结果是"EW"
综上所述,最后的输出结果是"POINTERSTEW"
注意:cpp[ 1 ]=*(cpp+1);表示取值,cpp指针本身不移动
*cpp+1表示cpp指针指向的位置向后移动一次,并且解引用得到指针指向的空间里存放的内容