| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 604 人关注过本帖
标题:关于指向多维数组的指针
只看楼主 加入收藏
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
 问题点数:0 回复次数:6 
关于指向多维数组的指针
程序中的循环不懂。菜鸟,求指教
main()
{
float a[2][3]={1,2,3,4,5,6};
int i;
for(p=*a,p<*a+2*3;p++)
printf("\n%f",*p);
}
不知道for(p=*a,p<*a+2*3;p++)具体是怎么循环的,还有p<*a+2*3是什么意思?怎么它能把数组输出。
搜索更多相关主题的帖子: 指针 多维 
2010-08-29 13:39
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
*a 就是 a[0] 就是 &a[0][0]。

*a + 2*3  == &a[0][0]

因为数组是连续的,所以 a[2][3] 就是连续的6个float存储空间。

—>〉Sun〈<—
2010-08-29 15:57
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
得分:0 
以下是引用cosdos在2010-8-29 15:57:01的发言:

*a 就是 a[0] 就是 &a[0][0]。

*a + 2*3  == &a[0][0]

因为数组是连续的,所以 a[2][3] 就是连续的6个float存储空间。
*a + 2*3  == &a[0][0]?是不是意思是说数组是连续的储存空间,可以通过首地址往后走六个储存空间就能得到所有的数组元素。?
2010-08-29 16:02
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
差不多就是这样。

还需要注意指针加法。
指针加法与平时的加法不同,需要考虑元素的大小。

—>〉Sun〈<—
2010-08-29 16:15
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
*a + 2*3  == &a[0][0]
不对吧,
应该是:
*a + 2*3  == &a[0][0] + 6
然后通过第一个&a[0][0]一直访问到&a[1][2]


[ 本帖最后由 erikyo 于 2010-8-29 21:29 编辑 ]
2010-08-29 20:53
guoguo3138
Rank: 2
等 级:论坛游民
帖 子:15
专家分:35
注 册:2010-8-20
收藏
得分:0 
p为指针,for(p=*a,p<*a+2*3;p++)中
循环第一次p指向a[0][0]
第二次p加1,指针指向a[0][1]
第三次a[0][2]
第四a[1][0]
第五a[1][1]
第六a[1][2]
2010-08-29 21:21
synelang
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2010-8-29
收藏
得分:0 
C其实没有多维数组,是一个线性空间。数组的访问会通过计算指针计算来定位元素。
声明a[i][j],其实是声明了一个常指针, int ** const a
*a 代表 int* 类型的变量
a[i][j]的访问是  *(*a + (i*列数) + j)
那么数组a[2][3]的最后一个元素是a[1][2] = *(*a + 1*3 + 2) = *(*a + 5)
所以超出范围的位置是*a + 6

注:当你声明了一个int*型指针p来遍历数组,那么要保证赋值时类型一致, int * p = *a


综上,楼主贴的代码风格,相当的不好,不鼓励在实际开发中使用!
虽然指针访问效率比用数组形式快,但这样的场景下,使用数组比较好。


建议:

1、发正确的代码

2、发格式好的代码,这里介绍一个网站,可以让你的代码着色,并排版。http://

[ 本帖最后由 synelang 于 2010-8-29 21:55 编辑 ]
2010-08-29 21:34
快速回复:关于指向多维数组的指针
数据加载中...
 
   



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

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