| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1459 人关注过本帖, 2 人收藏
标题:一个很细的问题,你注意到了吗?
取消只看楼主 加入收藏
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏(2)
 问题点数:0 回复次数:6 
一个很细的问题,你注意到了吗?
程序代码:
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}

输出:?,?
请当做一个现场笔试题来做,不要CTR+C哦~

[ 本帖最后由 luyi_footman 于 2011-8-25 18:36 编辑 ]
搜索更多相关主题的帖子: 问题 
2011-08-25 18:35
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 2楼 voidx
哈~所以我要求不能之前编译再作答,不过呢,如果实在是最后忍不住编译了下知道结果了,最好能说出个所以然来。我想,只要每个看过这贴的朋友都认真的思考的话,肯定会由收获的。如果大家反响效果好的话,我以后会多发起注入此类的帖子的。

天道酬勤!
2011-08-25 18:45
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 7楼 Luminal
恩,谢谢你的回复,而且你的解释也很专业,不过我想就你的回复补充两点我的看法
1:当ptr指向a[4]的下一个地址时应该不能解释为越界,ptr作为一个指向整型数的指针可以被初始化为指向任何地址(当然是内存范围内),所以个人理解不应该是越界,而只是一个不寻常的指针初始化而已。
2:我出这样一个题目绝没有难为初学者的意思,因为自己本身就是一个初学者。

天道酬勤!
2011-08-25 19:13
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 12楼 a9517495424
不会的,应该是你copy的过程中有误,仔细检查下看看。

天道酬勤!
2011-08-25 19:28
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 11楼 voidx
我也试了下直接赋值0xffffffff,我在dev里编译了下没有报错,但是我在linux下用GCC编译就报错了,如果改成ptr = (unsigned int *)0xffffffff就不报错了。所以综合来看,应该是编译不同的话,处理方式也不同。不过从编程严谨的角度说,不应该把内存之外的地址赋给一个指针,就算非要这么这么做,也应该把这个地址转化为unsigned int *类型。个人理解。

天道酬勤!
2011-08-25 19:32
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 15楼 Luminal
哈~不管是越界还是这种不寻常的初始化,如果程序要访问这个地址的值,将是一个灾难性的操作,作为程序员,不应犯这种错误的。
初学者也好,专业人士也罢,关键是一个心态。

天道酬勤!
2011-08-25 19:35
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 23楼 beyondyf
我发现他的解释更好,&a是一个二级指针,对的,这样理解起来很轻松。学习了!

天道酬勤!
2011-08-26 19:46
快速回复:一个很细的问题,你注意到了吗?
数据加载中...
 
   



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

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