请教C语言高手!

#include<stdio.h>voidmain(){char*c[]={"ENTER","NEW","POIT","FIRST"};char**cp[]={c+3,c... #include<stdio.h>
void main()
{
char *c[]={"ENTER","NEW","POIT","FIRST"};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
printf("%s\n",**++cpp);
printf("%s\n,",*--*++cpp);
printf("%s\n",*cpp[-2]+3);
printf("%s\n",cpp[-1][-1]+1);

}

为什么?请详解,每一步输出的原因?谢谢
展开
 我来答
THEANARKH2
2012-07-29 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:30.3万
展开全部

我说一下前面一个吧,后面的我只能想到数组越界,还有*cpp【0】居然不是等于FIRST,我直接不干了。

第一个开始时cpp指向(看图),然后++,指向cp的1(看图),执行第一个星号时,得到cp数组的cp【1】的内容,即是c【2】的地址,然后再一个星号,就是c【2】的内容,就是第一个答案POIT,第二题,此时的cpp已经指向cp【1】,再++后就指向了c平【2】,*号取c【2】的值,即c【1】的地址,然后执行--,得到c【0】的地址,再*号取值得到ENTER.

Clor001
2012-07-29 · TA获得超过804个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:409万
展开全部
char *c[]={"ENTER","NEW","POIT","FIRST"};// 指针数组,数组的每个元素是指针,这里存常量字符串的首地址。
char **cp[]={c+3,c+2,c+1,c};//二级指针数组,数组每个元素是二级指针,这里存了c[3].c[2],c[1] ,c[0] 的地址, 也就是上面字符串顺序逆序
char ***cpp=cp; 三级指针指向cp数组首地址。 ps,一般三级指针在正常的程序里不会出现,容易形成非常混乱的局面。
printf("%s\n",**++cpp); POIT//优先级相同,临近原则 ++cpp ---> c+2的地址 ,两次间址 是POIT
printf("%s\n,",*--*++cpp); ENTER// ++cpp--->cp+1(上面自增过了),间址一次变成cp[1],-- c+1再间地址,就是c第一个元素。ENTER。
printf("%s\n",*cpp[-2]+3); ST//cpp指向c+1的位置。cpp[-2] 就是 *(cpp-2) 指向cp+0, 就是c+3
*(c+3)+3 不就是 FIRST 数第四个字母么,后面输出ST。
printf("%s\n",cpp[-1][-1]+1);上面cpp还是指向在c+1, *(cpp-1)是 c+2, *(*c+2 - 1) --->c+1, NEW这个单词地址, *((*(c+1))+1) 数到E 往后输出

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻盈又威武灬mmZ
2012-07-28
知道答主
回答量:35
采纳率:0%
帮助的人:12.6万
展开全部
无语了,指针数组和指针的指针你探究的太猛了,到目前为止我学得基础的没有遇到这么复杂的,!建议提高些悬赏!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鸭宝宝_1988
2012-07-29 · 超过13用户采纳过TA的回答
知道答主
回答量:64
采纳率:100%
帮助的人:43.9万
展开全部
额,***cpp啊~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式