我是这样理解的,首先你要明白:由于二维指针存的是指针的指针,你给二维指针赋的值必须是一个对指针取地址后的指针,意思是说:int **p2;int *p1;p2 = & p1;这样才符合规则,我想你是这儿不明白吧。在你的程序中 :a[][]中的a是首地址,可以认为是个常量值,而二维指针所要赋的值确是指针变量的地址。其次你要理解,数据在内存中是按顺序排列的,不存在二维,只是人们为了方便而那样想的,若要制造二维概念,就必须学会用指针跳跃访问,一次性跳过好几个内容,到达下一个地址,就可以看做是到二维中的第二个地址了。int a[2][2]={1,2,3,4};int (*p)[2];p = a;p此时指向的是a[0][0],p+1指向的就是a[1][0];因为p在定义的时候声明过,指针加一,相当与移动两个。你的程序如下:#include void main(){ int i,j; int (*p)[2];
/*此处是(*p)[2]不是*p[2],后者是指针数组*/ int a[2][2]={1,2,3,4}; for(i=0;i<2;i++)for(j=0;j<2;j++) printf("%d ",a[j]);
p=a;for(i=0;i<2;i++)for(j=0;j<2;j++) printf("%d ",p[j]); } qq: 502525713 |