野火电子论坛

标题: 【每日一题讲解】数组名加减的问题 [打印本页]

作者: 山外メ雲ジ    时间: 2013-11-20 00:25
标题: 【每日一题讲解】数组名加减的问题
本帖最后由 山外メ雲ジ 于 2013-11-20 00:31 编辑

  1. //运行以下程序,求运算结果

  2. char a[4]={1,2,3,4};
  3. char *ptr=(int*)(&a+1);
  4. printf("%d",*(ptr-1));

  5. //可供选择的答案:
  6. //A.1
  7. //B.2
  8. //C.4
  9. //D.随机值
复制代码
国际惯例,答案回复可见。我们出题目的目的,是给大家一个思考的机会,不要题目都不去思考,直接看答案哦,那样学不了东西的。
大家回复的时候,把答案也写上去哦。





作者: 山外メ雲ジ    时间: 2013-11-20 00:29

昨天的题目,大家可以看看结果:

【每日一题讲解】指针操作的问题 - 软件设计区 - 野火初学123论坛 http://firebbs.cn/forum.php?mod=viewthread&tid=1134

(, 下载次数: 1)

作者: 青苹果    时间: 2013-11-20 00:37
回答正确了,看看分析是否我想的那样
作者: 随风    时间: 2013-11-20 01:04
写的真的很不错
作者: JudeScorpio    时间: 2013-11-20 08:28
基础不牢固呀,学习了
作者: 在路上    时间: 2013-11-20 08:35
走过路过,不能错过
作者: ♂荻夜    时间: 2013-11-20 09:19
走过路过,好好学习C指针

作者: 飞翔    时间: 2013-11-20 11:05
答错了 看看解析
作者: 火弟    时间: 2013-11-20 11:08
走过路过,不能错过
作者: yangyankunlc    时间: 2013-11-20 12:59
学习学习!   
作者: 不良    时间: 2013-11-20 14:14
- - 答对了。。不过看看思路。。
作者: 小歌。。。    时间: 2013-11-20 14:26
学习下,万能的火哥
作者: 小歌。。。    时间: 2013-11-20 14:47
a【4】数组里总共只有四个元素,从a[0]到a[3],a[4]出现在这个过程中不违反规定吗?
作者: fsujn    时间: 2013-11-20 19:15
回答错了,来看看分析过程
作者: ck1994    时间: 2013-11-20 19:50
A走过路过,不能错过
作者: gaolongtou    时间: 2013-11-20 20:10
难道是A吗?我选的D
作者: desire    时间: 2013-11-20 20:15
C。。。。。。
作者: 单身男人    时间: 2013-11-20 23:02
真棒!!非常感谢
作者: JudeScorpio    时间: 2013-11-21 08:19
C:\Users\JudeScorpio\Desktop\QQ图片20131121081626.jpg
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?
作者: JudeScorpio    时间: 2013-11-21 08:19
JudeScorpio 发表于 2013-11-21 08:19
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?

额,怎么上图?
作者: LIEYING    时间: 2013-11-21 10:20
真棒!!非常感谢
作者: LIEYING    时间: 2013-11-21 10:21
真棒!!非常感谢
作者: jayxing    时间: 2013-11-21 11:15
答错了。。。。。。。。。。。。。
作者: Distance.    时间: 2013-11-21 16:16
我选择的是A   1   错了  不知道原因  求教
作者: wkhuahuo    时间: 2013-11-21 19:29
自己分析了一下感觉是A
可是编程验证后确实C
应该是&a+1的事。不知道这个1,代表多少个地址单元。。。
作者: Summer    时间: 2013-11-21 20:24
随机的把  最后是把一个地址 放进去 了啊

作者: xiake017    时间: 2013-11-21 21:58
感谢每日一题学习了
作者: liuwanli    时间: 2013-11-21 22:00
答案是4,
作者: 小小单片机0    时间: 2013-11-22 08:43
真棒!!非常感谢
作者: cdxming    时间: 2013-11-22 08:47
真棒!!非常感谢
作者: H.M.S    时间: 2013-11-22 09:00
这道题前两天回答了两次都错了,而且发现每次题目都有些差别,昨天数组类型是int a[4];指针类型int *ptr。今天不一样了。
作者: Waiting    时间: 2013-11-22 09:45
天天都在打酱油!!
作者: STC89C52    时间: 2013-11-22 11:15
又错了555555555555555555555555
作者: STC89C52    时间: 2013-11-22 11:44
为啥不是A啊。。。。。
作者: STC89C52    时间: 2013-11-22 11:53
火哥每天这里都能收到益处我刚学c语言,每天早上起来第一件事就是看一看每日一题然后路上想嘻嘻嘻
作者: huwenjian    时间: 2013-11-23 11:09
我选的B,不会做啊!!
作者: king    时间: 2013-11-23 13:42
真棒!!非常感谢
作者: boyu    时间: 2013-11-23 15:24
真棒!!非常感谢
作者: yukaigogogo    时间: 2013-11-23 15:47
1    我不知道取地址的运算优先极是不是要大于加号,我选a首地址+1,*ptr=2   *(ptr-1)=1,所以选A
作者: yukaigogogo    时间: 2013-11-23 15:52
能不能再解释的详细一点,完全不懂
作者: xuetudou    时间: 2013-11-25 08:52
D,&a+1是把地址往后移动了一个字节,然后强制转换成指向int类型的指针,然后将指针减去一个int类型的长度,就是4,所以答案是随机的
作者: fire    时间: 2013-11-25 12:52
STC89C52 发表于 2013-11-22 11:53
火哥每天这里都能收到益处我刚学c语言,每天早上起来第一件事就是看一看每日一题然后路上想嘻嘻嘻

我们的论坛就是专为初学者而生
作者: fire    时间: 2013-11-25 13:05
yukaigogogo 发表于 2013-11-23 15:52
能不能再解释的详细一点,完全不懂

a 是 (char*) 类型的
&a 是 char (*)[4] 类型的

a + 1 就是 (int)a + sizeof(char) = a 的地址值 加 1 ,即 a[1] 的地址
&a + 1 就是 (int)a + sizeof(char (*)[4] ) = a的地址值 + 4*1 ,即 a[5] 的地址
作者: fire    时间: 2013-11-25 13:16
JudeScorpio 发表于 2013-11-21 08:19
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?

图片不能直接复制过来,要 点击上面的上传图片工具(切换到高级模式)

在调试界面,确实看到的值不对(脱离了上下文,导致无法识别真正的类型)。不过,你看真正的赋值,结果就出来

(, 下载次数: 1)
作者: sarjet    时间: 2013-11-26 16:57
B吧...少于10字符- -
作者: 飞鸿印雪    时间: 2013-12-2 11:00
抢沙发~我来顶楼主的抢沙发~我来顶楼主的
作者: ゞ從此消失╭ァ    时间: 2013-12-13 14:19
随机值吧,输出的是a【1】的地址减1 吧

作者: 詹伟彬    时间: 2013-12-20 12:56
选择D。输出指针指向对象的长度变了
作者: 蓝色梦想    时间: 2013-12-24 17:07
学习了真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢
作者: www12www    时间: 2014-1-7 08:55
逻辑上认为是4,即答案为C,
作者: sabrec    时间: 2014-1-7 09:45
走过路过,不能错过
作者: Wangyan    时间: 2014-1-7 10:00
题目有错,(int*)怎么能赋给char *,如果过来的话答案为C
作者: michael    时间: 2014-1-7 13:45
A.1  强烈支持,非常感谢哥们
作者: ajungle    时间: 2014-1-8 09:42
4   帅呆了,赞一个
作者: 游在云间    时间: 2014-1-16 08:32
答案市1吗?每台明白
作者: jerry_sun    时间: 2014-1-16 16:19
路过,看看分析
作者: wudax    时间: 2014-1-21 22:29
真棒!!非常感谢
作者: xiaocai    时间: 2014-2-13 08:15
        答案选1
作者: 箫剑酒仙    时间: 2014-2-15 22:34
1,,,ptr是char型的
作者: yjj    时间: 2014-2-19 16:14
学习知识了强烈支持,非常感谢哥们
作者: xzx0330    时间: 2014-3-4 11:53
走过路过,不能错过
作者: shengliangcumt    时间: 2014-3-8 19:35
C强烈支持,非常感谢哥们
作者: 真实的谎言    时间: 2014-3-8 21:27
强烈支持,非常感谢哥们
作者: BEAT    时间: 2014-3-10 22:06
强烈支持,非常感谢哥们
作者: 懒熊    时间: 2014-3-10 22:21
A不知道对不对
作者: 抱冰    时间: 2014-3-14 16:46
比雷公还雷人哦~
作者: 时光碎了天    时间: 2014-3-19 14:58
走过路过,不能错过
作者: ljhis007    时间: 2014-3-23 18:12
B啊   嘿嘿
作者: 独领风骚    时间: 2014-3-24 02:56
山外メ雲ジ 发表于 2013-11-20 00:25:14
本帖最后由 山外メ雲ジ 于 2013-11-20 00:31 编辑
//运行以下程序,求运算结果

char a[4]={1,2,3,4};
char *ptr=(int*)(&a+1);
pr

应该是A,数组各相当于首地址
作者: deanxuxi    时间: 2014-3-25 16:40
跟火哥学习
作者: 利剑007    时间: 2014-3-25 18:15
看看分析吧!
作者: kindlyde    时间: 2014-3-25 21:28
(int*) &a+1;;;;;;;;
作者: lts    时间: 2014-3-29 14:29

基础不牢固呀,学习了
作者: ヾ﹖    时间: 2014-3-31 16:48
A   强烈支持,非常感谢哥们
作者: redsky    时间: 2014-4-2 18:40
随机值吧 地址1中的数

作者: 探索者    时间: 2014-4-2 21:02
d,随机值,不是很清楚,感觉好像是a+1是指向地址a[0],指针减一就不知是什么了
作者: laiyok    时间: 2014-4-5 14:59
B笑坏我的肚子了
作者: flr    时间: 2014-4-8 09:26
不知道是怎么整
作者: fulei623    时间: 2014-4-9 07:08
强烈支持,非常感谢哥们
作者: zj20115659    时间: 2014-4-11 12:29
抢沙发~给哥们顶一个
作者: 张永明    时间: 2014-4-11 16:31
强烈支持,非常感谢哥们    是  1
作者: performfh    时间: 2014-4-14 19:02
4......................
作者: 等待花开    时间: 2014-4-14 23:42
应该是A吧,猜猜看
作者: 等待花开    时间: 2014-4-14 23:42
应该是A吧,猜猜看,走过路过,不能错过
作者: 江边小帅瓜    时间: 2014-4-16 09:30
强烈支持,非常感谢哥们来看看

作者: 易正新    时间: 2014-4-23 21:21
这题有点模糊了

作者: 易正新    时间: 2014-4-23 21:22
这题有点模糊了,应该是A吧


作者: huazhb2014    时间: 2014-4-23 22:47
A强烈支持,非常感谢哥们
作者: 林小鱼275    时间: 2014-5-1 13:38
学习一下   
作者: 赤道摘星    时间: 2014-5-1 19:04
c.4...................
作者: yehuovip    时间: 2014-5-4 19:25
看看是否又错了?
作者: ls3050    时间: 2014-5-4 19:42
//D.随机值
作者: 还不够    时间: 2014-5-17 17:09
c。。。。。。。。。。。

作者: baishiyi    时间: 2014-5-18 17:55
答案为C强烈支持,非常感谢哥们
作者: 在乡间的小路上    时间: 2014-5-20 16:02
选择答案d。
作者: 在乡间的小路上    时间: 2014-5-20 16:03
选择答案d。
作者: luozhimiao    时间: 2014-5-22 17:13
D,数组类型是字符型的,指针的类型也是字符型的,而输出的指针变量时整形的
作者: 我的战斧巡航    时间: 2014-5-24 16:08
1强烈支持,非常感谢哥们
作者: junlin132    时间: 2014-6-14 13:46
走过路过,不能错过      A
作者: 梦幻之旅    时间: 2014-6-14 22:12
答案应该是1吧?




欢迎光临 野火电子论坛 (https://www.firebbs.cn/) Powered by Discuz! X3.4