
请教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);
}
为什么?请详解,每一步输出的原因?谢谢 展开
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);
}
为什么?请详解,每一步输出的原因?谢谢 展开
4个回答
展开全部
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 往后输出
}
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 往后输出
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无语了,指针数组和指针的指针你探究的太猛了,到目前为止我学得基础的没有遇到这么复杂的,!建议提高些悬赏!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额,***cpp啊~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询