| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2442 人关注过本帖, 1 人收藏
标题:好久没看C基础了,各位分享道C基础题,试试你C基础过关了没
只看楼主 加入收藏
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
结帖率:100%
收藏(1)
已结贴  问题点数:100 回复次数:44 
好久没看C基础了,各位分享道C基础题,试试你C基础过关了没
#include <stdio.h>

int main()
{
        int a[] = {1,2,3,4,5};
        int *p = (int *)((int)a + 1);
        printf("%x\n", *p);
}


提示一下:绝对不是错误题啊!第一个解释完全正确(不是指打印结果)的得50分,后面的看情况给分
搜索更多相关主题的帖子: include 基础 
2012-10-18 15:44
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
凑热闹
2012-10-18 16:18
senpujituan
Rank: 4
等 级:业余侠客
帖 子:91
专家分:203
注 册:2012-6-29
收藏
得分:5 
(int)a+1只是单纯意义上的数字加1,不是下个元素。后面不知道了!!求解
2012-10-18 16:26
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
收藏
得分:5 
a  即&a[0]   
(int)&a[0]即把地址转换成整形
再加上1
再强制转换成int型指针
把这个指针赋值给p
p最后输出的是a的地址再加上1

喜欢睡觉 却经常熬夜
2012-10-18 16:31
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
回复 4楼 阿鞠尼
解释结果,你那么说那值不就随地址的变化而变化了,那样还有什么意义呢

[ 本帖最后由 遗矢的老人 于 2012-10-18 16:55 编辑 ]
2012-10-18 16:44
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 3楼 senpujituan
我觉得前面的都对,但是输出的不是a的地址加上1,而是a的地址加上1后的新地址里面的值,并且以八进制形式输出
2012-10-18 16:51
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
这道题我个人觉得有点问题,比如说在64位机中的地址长度为64位,而int类型为32位长,这样讲a转换为int时,会出现长度的截断,会出问题。

愿用余生致力编程
2012-10-18 17:00
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
回复 6楼 核晴核理
%x不是八进制,而是十六进制,所以这题我都降低难度了,应该以%d形式打印的,那就更模糊了

[ 本帖最后由 遗矢的老人 于 2012-10-18 17:07 编辑 ]
2012-10-18 17:05
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
继续...

上述问题不去考虑的话,比如说a = 0x100即指向地址为100处,a+1向后偏移一个字节位置,指向0x101处,
数值1的二进制:00000000 00000000 00000000 00000001
数值2的二进制:00000000 00000000 00000000 00000010
内存结构:00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000010(红色表示此时指针指向的位置)
p表示一个int类型的指针,占据四个字节,这样p指向的内容为(绿色):00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000010

愿用余生致力编程
2012-10-18 17:06
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 楼主 遗矢的老人
   版主,你这不是坑人吗?研究了半天也只知道p的地址是a的地址加1,但奇怪的是无论a[0]和a[2]的值怎么改变,p中存放的值也不会改变,说明p中的值不是随机的,且不受a[0]和a[1]的影响。我快崩溃了,是不是俺的C语言还很菜啊,版主,求解释!!!
2012-10-18 17:07
快速回复:好久没看C基础了,各位分享道C基础题,试试你C基础过关了没
数据加载中...
 
   



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

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