目录
刚看到这道题的时候我也和大多数小白一样感到无从下手,但是在我写这篇博客的前几分钟开始我对这道题有了一点点的理解。所以我就想着趁热打铁,写一篇博客来记录一下我的想法。
题目如下:
画图:
逐一解答:
题一:
**++cpp=**(cpp+1)=*(c+2)=POINT的地址
题2:
*--*++cpp+3=*--*(cpp+1)+3=*--*(cp+2)+3=*(--(c+1))+3=*c+3=ENTER地址+3=第二个E的地址
编辑
第三题:
*cpp[-2]+3=*(cpp-2)+3=*(cp)+3=*(c+3)+3=FIRST的首元素地址+3=S的地址。使用%s进行打印,所以结果是ST。
第四题:
结语:
刚看到这道题的时候我也和大多数小白一样感到无从下手,但是在我写这篇博客的前几分钟开始我对这道题有了一点点的理解。所以我就想着趁热打铁,写一篇博客来记录一下我的想法。
题目如下:
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 *c[] = {"ENTER","NEW","POINT","FIRST"};
char**cp[] = {c+3,c+2,c+1,c};
char***cpp = cp;
来画一下表示两个字符指针数组变量,一个字符指针变量以及四个字符串之间的指向的图:
逐一解答:
题一:
printf("%s\n", **++cpp);
**++cpp=**(cpp+1)=*(c+2)=POINT的地址
传入POINT的地址并使用%s打印,说以结果就是POINT。
题2:
printf("%s\n", *--*++cpp+3);
*--*++cpp+3=*--*(cpp+1)+3=*--*(cp+2)+3=*(--(c+1))+3=*c+3=ENTER地址+3=第二个E的地址
结果用%s打印,所以是ER。
第三题:
printf("%s\n", *cpp[-2]+3);
*cpp[-2]+3=*(cpp-2)+3=*(cp)+3=*(c+3)+3=FIRST的首元素地址+3=S的地址。使用%s进行打印,所以结果是ST。
第四题:
printf("%s\n", cpp[-1][-1]+1);
cpp[-1][-1]=(*(*(cpp-1))-1)+1=(*(c+2-1))+1=(*(c+1))+1=NEW的首元素加一,指向的就是E,
使用%s打印打印的就是EW。
结语:
以上就是我今天分享的全部内容了,希望对大家有所帮助。如果对你有用让你心情变好的话希望你能给我点个赞支持我一下。