C语言二维数组指针程序理解,看不懂这个程序,#includemain (){\x05char *strl[]={"first","second","third"};//什么意思?\x05char *p1,**p2,**p3[3],***p4;//怎么这么多*?\x05p2=strl;\x05p1=*(++p2)+2;\x05printf("%s\n",p1);\x05p3[0]=p2;

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 04:37:24
C语言二维数组指针程序理解,看不懂这个程序,#includemain (){\x05char *strl[]={

C语言二维数组指针程序理解,看不懂这个程序,#includemain (){\x05char *strl[]={"first","second","third"};//什么意思?\x05char *p1,**p2,**p3[3],***p4;//怎么这么多*?\x05p2=strl;\x05p1=*(++p2)+2;\x05printf("%s\n",p1);\x05p3[0]=p2;
C语言二维数组指针程序理解,看不懂这个程序,
#include
main ()
{
\x05char *strl[]={"first","second","third"};//什么意思?
\x05char *p1,**p2,**p3[3],***p4;//怎么这么多*?
\x05p2=strl;
\x05p1=*(++p2)+2;
\x05printf("%s\n",p1);
\x05p3[0]=p2;
\x05p3[1]=++p2;
\x05p3[2]=p2-1;
\x05p4=p3;
\x05printf("%s\n",++*--(++p4)[1]);
\x05return 0;
}这个程序真的看不懂,希望高手对每步解释说明下

C语言二维数组指针程序理解,看不懂这个程序,#includemain (){\x05char *strl[]={"first","second","third"};//什么意思?\x05char *p1,**p2,**p3[3],***p4;//怎么这么多*?\x05p2=strl;\x05p1=*(++p2)+2;\x05printf("%s\n",p1);\x05p3[0]=p2;
#include
main ()
{
char *strl[]={"first","second","third"};//定义长度为3的字符指针数组,数组元素是3个指向字符串的指针.这时候strl相当于二级char指针.
char *p1,**p2,**p3[3],***p4;
p2=strl; //p2是二级char指针,可以把strl的地址赋给它
p1=*(++p2)+2; //++p2,p2就等于strl[1]的地址了,取*后就是strl[1],str[1]是字符串second的首地址,再+2,p1就指向了字符c
printf("%s\n",p1); //输出字符c之后的字符串
p3[0]=p2; //p3是二级指针数组,让它的第一个元素等于p2
p3[1]=++p2; //让p3的第二个元素等于++p2.p2之前已经指向strl[1]了,++后指向strl[2]
p3[2]=p2-1; //让p3的第三个元素指向strl[1]
p4=p3; //二级指针数组的地址,相当于三级指针.p4这时候和p3等价
printf("%s\n",++*--(++p4)[1]); //++p4后,p4和&p3[1]等价,再[1]就等于p3[2],p3[2]指向的是strl[1],所以--后指向的是strl[0],*是取strl[0]的地址,再++就得到first中字符i的地址.
return 0;
}