二维指针问题

[复制链接]
查看11 | 回复0 | 2010-2-22 14:51:18 | 显示全部楼层 |阅读模式
我是这样理解的,首先你要明白:由于二维指针存的是指针的指针,你给二维指针赋的值必须是一个对指针取地址后的指针,意思是说: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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行