| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1468 人关注过本帖, 2 人收藏
标题:一个很细的问题,你注意到了吗?
只看楼主 加入收藏
taqiao
Rank: 1
等 级:新手上路
帖 子:7
专家分:3
注 册:2010-7-2
收藏
得分:0 
路过

学习学习
2011-08-26 17:25
风尘儒生
Rank: 2
等 级:论坛游民
帖 子:8
专家分:31
注 册:2010-11-25
收藏
得分:0 
其实教学和应用是两回事。。我想没有那个程序员会在程序中写这样的代码。。
但作为一个题目。。它却能让初学者更好的理解指针。。不是么。。所以不要骂这个题了。。
2011-08-26 17:35
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你们的理解还是有问题。&a的地址和a是一样的并没有指向a[4]。
重要的是&a + 1这一步。这里需要明白给指针加一个整数(N)后,其指向并不是简单地移动N个字节,而是移动N倍的指针所指向变量类型个字节。
就楼主的问题里,a本身也是一个常指针,&a是指向a数组的指针(一个二级指针),所以对&a加1的实际偏移量是一个a数组的长度。
所以才指向了a[4]后一个的位置。
关于这一点大家可以试一下sizeof(a),以及用%p查看一下a, &a, &a+1所指向的地址。

重剑无锋,大巧不工
2011-08-26 17:54
黑客32
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-25
收藏
得分:0 
这个问题不错,回答的也挺好
2011-08-26 19:34
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 23楼 beyondyf
我发现他的解释更好,&a是一个二级指针,对的,这样理解起来很轻松。学习了!

天道酬勤!
2011-08-26 19:46
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
回复 20楼 lz1091914999
这个才是正解
2011-08-26 19:56
羲和
Rank: 2
等 级:论坛游民
帖 子:20
专家分:12
注 册:2011-7-7
收藏
得分:0 
学习了
2011-08-26 22:30
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
我也觉得这是个考指针概念的好题目。a指向int 类型的数据,&a指向5个int类型的数据,因此&a+1指向了下一组5个int类型。然后int *ptr=(int *)(&a+1);转换后,prt指向了单个int类型,因此prt-1指向了a的最后一个int类型数据,取数值后就是5.这里没有对这个地址进行写操作,不会有什么致命的危险。


[ 本帖最后由 pauljames 于 2011-8-27 07:12 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-27 07:11
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
type* p = 0;
p+1 == (char*)p + sizeof(type);
如果a是一个二级指针,那么对其加1,只会偏移一个指针的大小(一般是四个字节)。
typedef int Array5 [5],a的类型是Array5,但它也可以稳式的转化成int*。情况就是这样。

迭代的是人,递归的是神。
2011-08-27 09:29
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
这是个好题目 如果看了解释还不懂的 就说明指针没学好
另外没觉得是越界 只要不做写操作 就不要提越界的事情
毕竟数组只是并限定了偏移范围的指针而已 指针只要有初始地址和偏移量是不用担心读的问题的
2011-08-27 18:50
快速回复:一个很细的问题,你注意到了吗?
数据加载中...
 
   



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

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