| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 547 人关注过本帖
标题:二维数组指针问题
只看楼主 加入收藏
lvqing9
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-8-13
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
二维数组指针问题
假设有如下数组定义语句:
int array[3][4];
array+i*(array+i),为什么是一样的啊?
我知道array+i指的是数组第i行地址,*(array+i)是什么啊?
在别的地方看有人说是第i行第一个元素的地址。为什么是这样?一般用“*”这个符号是求存在于某个地址的值,这里怎么能用它来求地址啊。
为什么要求array[i][0]的值要用*(*(array+i))啊?
很烦啊!大家一定要帮忙啊!
搜索更多相关主题的帖子: 指针 
2010-08-18 10:12
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
收藏
得分:0 
我也很烦他这样引用
2010-08-18 10:18
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:10 
array+i指的是数组第i行地址,可以这么理解,array 相当于二维指针,(其实array 是一个指向包含4个int类型的一维数组指针,)array +i 即指向数组的第i行(也是一个二维指针吧),而*(array+i)也是说明array + i 的首地址(可以理解为一个一维指针),(*(array + i ))[0]跟*(*(array+i))应该是array[i][0]。
不知道这么说对不对。本人是这么理解的,更权威的解释可以参考the c programming language一书.

2010-08-18 11:03
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:5 
在指针遇到数组的时候,就不要局限于*是取指针目标这种想法,它还有别的意思,至少还是乘号吧?
在这种场合下*的意思是降低指针等级,&的意思是提升指针等级。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-18 11:17
lvqing9
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-8-13
收藏
得分:0 
用一维数组的观点去理解,这个数组是一个三行四列的二维数组。可以看成是三个一维数组组成的,我们把它命名为a[1],a[2],a[3]分别代表三行的数组,每个数组里又含有4个数。这样我们就可以用一维数组指针的观点却解决这个问题了!
在一维数组指针当中a[i]==*(a+i),所以在二维数组当中我们可以用*(a+i)表示二维数组当中的a[i],在二维数组当中a[i]代表我们把它看成的一维数组名,这时只能表示首地址(数组名代表首地址)。就如同一维数组名只代表一维数组的首地址一样。其实这时的二维数组就是在一维数组的名下每个又有几个元素罢了!
所以在二维数组中a+i表示a[i]的地址也即行地址,*(a+i)表示a[i]的首地址。
首地址找到了该行地址就找到了,所以可以说明a+i和*(a+i)是一样的。
这是我想了半天的结果,拿出来让大家看看。最后我觉得对于一个二维数组a[i][j]大家可以这样看"( a[i] )[j]".

2010-08-18 11:52
lvqing9
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-8-13
收藏
得分:0 
回复 3楼 燕强
谢谢你!我最后也是这么想的。就这样理解吧!
2010-08-18 12:07
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:5 
以下是引用lvqing9在2010-8-18 10:12:52的发言:

假设有如下数组定义语句:
int array[3][4];
array+i和*(array+i),为什么是一样的啊?
我知道array+i指的是数组第i行地址,*(array+i)是什么啊?
在别的地方看有人说是第i行第一个元素的地址。为什么是这样?一般用“*”这个符号是求存在于某个地址的值,这里怎么能用它来求地址啊。
为什么要求array[0]的值要用*(*(array+i))啊?
很烦啊!大家一定要帮忙啊!
首先array+i代表的是二维数组第i行的首地址,也即是&array[i],
而*(array+i)代表的是二维数组第i行首元素的首地址,也即是&array[i][0]
他们两个的值是一样的,但是代表的意思是不一样的。
2010-08-18 13:10
lxjie
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-12-8
收藏
得分:0 
二维数组a[i][j]中,可用a+i表示数组的第i行a[i]的地址,而第i行a[i]的首地址用*(a+i),第i行第j个元素的地址为*(a+i)+j,即a[i][j]=*(*(a+i)+j)。
希望对你有帮助。。。

c语言初学者
2012-12-08 16:01
快速回复:二维数组指针问题
数据加载中...
 
   



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

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