标题:二维数组与指针
只看楼主
01renjie
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-7-7
得分:0 
二维数组a,a[i],*(p+i)等价,他们都是一维数组的首地址。a[i]+j和*(p+i)+j的值都是a[i][j]的地址,*(a[i]+j)或*(*(p+i)+j)即为a[i][j]。
2006-07-07 22:22
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
得分:0 
解释下指针

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编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-07-08 08:45
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
乌鸦解释的很精彩咧~
鼓掌...

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

学习啦~

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-07-08 09:48
lianxin19
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2006-7-8
得分:0 
高手!~

2006-07-08 15:37
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
我以前问过这个问题,呵呵 可以去找来看看,他们解析得很好,另外论坛里也有专门解析数组和指针的文章,写得很好
2006-07-08 16:02
pingxiaoqi
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2004-12-11
得分:0 
就是指向指针的指针.定义时可以**P.楼上几个说得都很好

我们所等待的并不是我们真真想要的 所以不要等待,要积极
2006-07-08 17:57
lxs5216
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
得分:0 
谢谢各位指点了

对于指针的学习还将继续深入,届时再与大家讨论!
2006-07-09 18:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-77081-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.608559 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved