| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 480 人关注过本帖
标题:这段文字有的地方不懂,请教
取消只看楼主 加入收藏
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
这段文字有的地方不懂,请教
设有整型二维数组a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
   设数组a的首地址为1000,各下标变量的首地址及其值如图所示。在第四章中介绍过,C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为 1000。*(a+0)或*a(这两个是什么意思)是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址。也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a?amp;a[0] [0]是相等的。同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。 &a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。

  C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也
可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。由 a[i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(* (a+i)+j)。
[Explain]#define PF "%d,%d,%d,%d,%d,\n"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf(PF,a,*a,a[0],&a[0],&a[0][0]);
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}



[ 本帖最后由 雪鹰独行 于 2009-11-8 09:19 编辑 ]
搜索更多相关主题的帖子: 文字 
2009-11-08 09:14
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
收藏
得分:0 
回复 2楼 李若斌
还是有点一头雾水的感觉,我再理解一下看看。赫赫,谢了。
2009-11-08 11:19
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
收藏
得分:0 
我有点明白了,写一下。
在二维数组中,a[i]表示的是第i行的首地址,a+i表示的是第i行的首地址的地址,因此,*(a+i)表示的是第i行的首地址。一般情况下直接运用就可以了。
2009-11-08 11:51
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
收藏
得分:0 
在这里,单独的a可以做两种解释,因此可以表示成两种形式
2009-11-08 11:52
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
收藏
得分:0 
回复 6楼 pgy
为什么
2009-11-08 11:54
快速回复:这段文字有的地方不懂,请教
数据加载中...
 
   



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

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