|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 一个很细的问题,你注意到了吗?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1473
人关注过本帖,
2
人收藏
标题:
一个很细的问题,你注意到了吗?
只看楼主
加入收藏
luyi_footman
等 级:
论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
楼主
收藏
(2)
问题点数:0 回复次数:30
一个很细的问题,你注意到了吗?
程序代码:
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
举报帖子
使用道具
赠送鲜花
voidx
来 自:邯郸
等 级:
火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
第
2
楼
收藏
得分:0
嗯~这个贴好
2011-08-25 18:38
举报帖子
使用道具
赠送鲜花
luyi_footman
等 级:
论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
第
3
楼
收藏
得分:0
回复 2楼 voidx
哈~所以我要求不能之前编译再作答,不过呢,如果实在是最后忍不住编译了下知道结果了,最好能说出个所以然来。我想,只要每个看过这贴的朋友都认真的思考的话,肯定会由收获的。如果大家反响效果好的话,我以后会多发起注入此类的帖子的。
天道酬勤!
2011-08-25 18:45
举报帖子
使用道具
赠送鲜花
naruto01
等 级:
业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
第
4
楼
收藏
得分:0
2 5
主要是&a+1
&a取的是a[5]的地址 注意+1的步长就行了。。
小白路过
以上言论
概不负责
[
本帖最后由 naruto01 于 2011-8-25 18:51 编辑
]
2011-08-25 18:47
举报帖子
使用道具
赠送鲜花
laoyang103
来 自:内蒙古包头
等 级:
贵宾
威 望:
19
帖 子:3082
专家分:11056
注 册:2010-5-22
第
5
楼
收藏
得分:0
提前声明我用编译器了 其实是这样 &a的地址相当于取整个数组的地址 这个指针的类型是指向5个整数的
整形数组 所以加一相当于移动了5个整数 所以越界了
如果要是再转整形减一 那么就指向了五
===========深入<----------------->浅出============
2011-08-25 18:50
举报帖子
使用道具
赠送鲜花
voidx
来 自:邯郸
等 级:
火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
第
6
楼
收藏
得分:0
回复 5楼 laoyang103
就是这么回事,不过好像不该说是越界,而是 ptr 指向了 a[4] 后面的那个内存单元
2011-08-25 18:54
举报帖子
使用道具
赠送鲜花
Luminal
等 级:
侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
第
7
楼
收藏
得分:0
结果是 2,5
也就是输出 a[1],a[4]
如此运用指针运算,这不知道目的何在?难为初学者吗?
int *ptr=(int *)(&a+1);//已经超出了数组a的有效地址范围,指向了&a[4]之后的地址了
printf("%d,%d",*(a+1),*(ptr-1));
这里的*(a+1)<=>a[1],吓唬初学者的,虽然a[1]在编译的时候是表示为:*(a+1)的
*(ptr-1),前面已经说了 ptr已经指到数组a的有效数据后面了,都是int型的,所以
(ptr-1)指向&a[4],故*(ptr-1)<==>a[4];
这样输出结果就出来了
这题就是忽悠人的!!用不规范的写法,和不符合逻辑的表达方式来实现的!
2011-08-25 18:56
举报帖子
使用道具
赠送鲜花
voidx
来 自:邯郸
等 级:
火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
第
8
楼
收藏
得分:0
楼上的头像总让我觉得像是个小太监~ 嘿~
没有恶意的哦~
2011-08-25 19:02
举报帖子
使用道具
赠送鲜花
Luminal
等 级:
侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
第
9
楼
收藏
得分:0
回复 8楼 voidx
哈哈,现在不是流行不男不女的造型吗?小沈阳不是就火了吗!
我也希望快点火
2011-08-25 19:07
举报帖子
使用道具
赠送鲜花
luyi_footman
等 级:
论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
第
10
楼
收藏
得分:0
回复 7楼 Luminal
恩,谢谢你的回复,而且你的解释也很专业,不过我想就你的回复补充两点我的看法
1:当ptr指向a[4]的下一个地址时应该不能解释为越界,ptr作为一个指向整型数的指针可以被初始化为指向任何地址(当然是内存范围内),所以个人理解不应该是越界,而只是一个不寻常的指针初始化而已。
2:我出这样一个题目绝没有难为初学者的意思,因为自己本身就是一个初学者。
天道酬勤!
2011-08-25 19:13
举报帖子
使用道具
赠送鲜花
31
1/4页
1
2
3
4
快速回复:
一个很细的问题,你注意到了吗?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.018457 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved