当前位置: 代码迷 >> C语言 >> 二维数组与指针
  详细解决方案

二维数组与指针

热度:111   发布时间:2006-07-07 22:22:34.0
二维数组a,a[i],*(p+i)等价,他们都是一维数组的首地址。a[i]+j和*(p+i)+j的值都是a[i][j]的地址,*(a[i]+j)或*(*(p+i)+j)即为a[i][j]。
----------------解决方案--------------------------------------------------------
解释下指针

Datatype *p

Datatype是某数据类型,因为p是指向Datatype的,所以显然p++的操作就让p指向的区域移动了sizeof(Datatype)个字节

int a[3][4],(*p)[4];
中的p指向的元素是一个长度为4的数组,对于a[3][4],你也可以这么看,a[3]是一个一维数组,它的元素是长度为4的数组,显然p指向的元素和a对应了

a[3][4]在内存中的储存顺序:

a[0][0],a[0][1],a[0][2],a[0][3],
a[1][0],a[1][1],a[1][2],a[1][3],
.....

一开始p指向a[0][0]这个地址,p++之后,因为p要移动4个int的大小,也就是移动到了a[1][0],如果p指向int:int *p),p++后p只要移动一个int的大小也就到了a[0][1]

PS:如果指针和数组对应引用元素的时候用数组的形式也可以,看起来方便些.比如
int a[3][4],(*p)[4];
p=a;这样要引用a[i][j]就可以直接写p[i][j]当然也可以*(*(p+i)+j)

[此贴子已经被作者于2006-7-8 8:48:03编辑过]


----------------解决方案--------------------------------------------------------
乌鸦解释的很精彩咧~
鼓掌...

简单点理解看11楼的也就够了么...HOHO~

学习啦~
----------------解决方案--------------------------------------------------------
高手!~
----------------解决方案--------------------------------------------------------
我以前问过这个问题,呵呵 可以去找来看看,他们解析得很好,另外论坛里也有专门解析数组和指针的文章,写得很好
----------------解决方案--------------------------------------------------------
就是指向指针的指针.定义时可以**P.楼上几个说得都很好
----------------解决方案--------------------------------------------------------
谢谢各位指点了

对于指针的学习还将继续深入,届时再与大家讨论!
----------------解决方案--------------------------------------------------------
  相关解决方案