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.对于**++cpp: 先进行++运算,++cpp=cp+1这块地址,*++cpp,就是取出cp+1这块地址所指向的空间的内容,所以*++cpp=c+2;而对c+2解引用就会指向常量字符串“POINT”中的字符P的地址,而打印时,是%s打印,所以打印的结果就是"POINT"。
2.*--*++cpp+3:就要考虑运算符的优先级了,最后进行+3的操作,对cpp再进行++操作,就会指向cp+2这块地址,解引用就是c+1;所以说*--*++cpp=*--(c+1);对c+1进行减减操作,就是c,解引用就指向“ENIER"中的”E“的地址,再进行+3操作,就是指向第二个”E“的地址。
3.4.你会分析嘛!试一试,是不是很有意思。