指针的指针
的有关信息介绍如下:当指针指向的是数组时,如果太复杂,你可以把它改成数组 c是二维数组,里面有4个字符串,"ENTER","NEW","POINT","FIRST",c是其首地址,指向c[0],c[0]是ENTER的首地址,指向E;如此类推. a是指向指针的指针的数组,a[0]~a[3]分别和c+3,c+2,c+1,c对应//a[3]=c,所以它指向的是"ENTER","NEW","POINT","FIRST",而不是ENTER; a是3维的。 再来看b,b=a,所以b就是a,b也是3维的。 **b就是将3维减去2维,也就是1维,是字符串,来看它里面内容: **b=**a,a指向a[0],*a=a[0],a[0]=c+3,c+3指向c[3],即*(a[0])=*(c+3)=c[3],c[3]="FIRST",所以**b="FIRST" *b是将3维去1维,剩2维,也就是说它是二维数组,来看它里面的内容: *b=*a,a指向a[0],*a=a[0],a[0]=c+3,而c+3={"FIRST"};所以*b={"FIRST"};//注意和**b的区别:**b是一串字符,是一维的,*b是n串字符,是二维的,只是这里的n=1罢了 再看*b[-2],*b[-2]是将3维去了2维(数组下标的作用),因而*b[-2]是字符串,再来看其内容: *b[-2]=*a[-2],先来看a[-2],a[-2]意思是说将取a指针上移两位的内容,在这里只能这么解释,因为在程序里b发生了变化,等到那在解释其内容 *************** 现在来看主程序: 1.输出:**++b内容,由运算级且++在左,先做++,此时b=b+1,指向位置上移一位,*++b=a[1],a[1]=c+2,**++b=*(c+2)=c[2]="POINT", 输出:POINT 2.输出:*--*++b内容:同上,b=b+1,因而*++b=a[2],在进行--a[2],a[2]=c+1,--a[2]=c+1-1=c,所以*--*++b=*--a[2]=*c=c[0]="ENTER" 输出:ENTER 3.输出:*b[-2]+3 ,经过上面的运算,b现在指向的是a[2],b[-2]是b指针下移2位,因而b[-2]=a[2-2]=a[0],*b[-2]=*a[0]=*(c+3)="FIRST",也就是说,*b[-2]是"FIRST"的首地址,*b[-2]+3 就是让首地址后移3位以第四个字符作为开头输出字符串,所以输出: ST4.输出:b[-1][-1]+1 ,同上b[-1]=a[2-1]=a[1]=c+2,b[-1][-1]=*((c+2)-1)=*(c+1)=c[1]="NEW",b[-1][-1]+1 ,将首地址后移一位,以第二个字符作为首地址输出字符串,所以输出: EW综上所述,电脑应该输出:POINTENTERSTEW而且整个过程中也不会出现指针下溢出的危险,不过这只是专门弄出来考指针的,所以才设计的没有溢出,自己在编程的时候,最好不要写负数下标,否则极易出现错误。如果还不懂,可以QQ联系:981909314(呼,搞定了,真累)