山外メ雲ジ 发表于 2013-11-20 00:25:14

【每日一题讲解】数组名加减的问题

本帖最后由 山外メ雲ジ 于 2013-11-20 00:31 编辑


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

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

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

**** Hidden Message *****


山外メ雲ジ 发表于 2013-11-20 00:29:41


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

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


青苹果 发表于 2013-11-20 00:37:23

回答正确了,看看分析是否我想的那样:lol

随风 发表于 2013-11-20 01:04:59

写的真的很不错

JudeScorpio 发表于 2013-11-20 08:28:07

基础不牢固呀,学习了

在路上 发表于 2013-11-20 08:35:54

走过路过,不能错过:victory:

♂荻夜 发表于 2013-11-20 09:19:30

走过路过,好好学习C指针

飞翔 发表于 2013-11-20 11:05:15

答错了 看看解析

火弟 发表于 2013-11-20 11:08:15

走过路过,不能错过:victory:

yangyankunlc 发表于 2013-11-20 12:59:27

学习学习!   

不良 发表于 2013-11-20 14:14:23

- - 答对了。。不过看看思路。。

小歌。。。 发表于 2013-11-20 14:26:41

学习下,万能的火哥

小歌。。。 发表于 2013-11-20 14:47:23

a【4】数组里总共只有四个元素,从a到a,a出现在这个过程中不违反规定吗?

fsujn 发表于 2013-11-20 19:15:07

回答错了,来看看分析过程

ck1994 发表于 2013-11-20 19:50:46

A走过路过,不能错过:victory:

gaolongtou 发表于 2013-11-20 20:10:06

难道是A吗?我选的D

desire 发表于 2013-11-20 20:15:42

C。。。。。。

单身男人 发表于 2013-11-20 23:02:03

真棒!!非常感谢:handshake

JudeScorpio 发表于 2013-11-21 08:19:03

C:\Users\JudeScorpio\Desktop\QQ图片20131121081626.jpg
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?

JudeScorpio 发表于 2013-11-21 08:19:50

JudeScorpio 发表于 2013-11-21 08:19 static/image/common/back.gif
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?

额,怎么上图?

LIEYING 发表于 2013-11-21 10:20:41

真棒!!非常感谢:handshake

LIEYING 发表于 2013-11-21 10:21:56

真棒!!非常感谢:handshake

jayxing 发表于 2013-11-21 11:15:47

答错了。。。。。。。。。。。。。

Distance. 发表于 2013-11-21 16:16:45

我选择的是A   1   错了不知道原因求教

wkhuahuo 发表于 2013-11-21 19:29:20

自己分析了一下感觉是A
可是编程验证后确实C
应该是&a+1的事。不知道这个1,代表多少个地址单元。。。

Summer 发表于 2013-11-21 20:24:53

随机的把最后是把一个地址 放进去 了啊

xiake017 发表于 2013-11-21 21:58:29

感谢每日一题学习了

liuwanli 发表于 2013-11-21 22:00:15

答案是4,:)

小小单片机0 发表于 2013-11-22 08:43:34

真棒!!非常感谢:handshake

cdxming 发表于 2013-11-22 08:47:25

真棒!!非常感谢:handshake

H.M.S 发表于 2013-11-22 09:00:09

这道题前两天回答了两次都错了,而且发现每次题目都有些差别,昨天数组类型是int a;指针类型int *ptr。今天不一样了。

Waiting 发表于 2013-11-22 09:45:00

天天都在打酱油!!

STC89C52 发表于 2013-11-22 11:15:15

又错了555555555555555555555555

STC89C52 发表于 2013-11-22 11:44:47

为啥不是A啊。。。。。

STC89C52 发表于 2013-11-22 11:53:50

火哥每天这里都能收到益处我刚学c语言,每天早上起来第一件事就是看一看每日一题然后路上想嘻嘻嘻

huwenjian 发表于 2013-11-23 11:09:15

我选的B,不会做啊!!

king 发表于 2013-11-23 13:42:15

真棒!!非常感谢:handshake

boyu 发表于 2013-11-23 15:24:30

真棒!!非常感谢:handshake

yukaigogogo 发表于 2013-11-23 15:47:13

1    我不知道取地址的运算优先极是不是要大于加号,我选a首地址+1,*ptr=2   *(ptr-1)=1,所以选A

yukaigogogo 发表于 2013-11-23 15:52:24

能不能再解释的详细一点,完全不懂

xuetudou 发表于 2013-11-25 08:52:42

D,&a+1是把地址往后移动了一个字节,然后强制转换成指向int类型的指针,然后将指针减去一个int类型的长度,就是4,所以答案是随机的

fire 发表于 2013-11-25 12:52:24

STC89C52 发表于 2013-11-22 11:53 static/image/common/back.gif
火哥每天这里都能收到益处我刚学c语言,每天早上起来第一件事就是看一看每日一题然后路上想嘻嘻嘻

:)我们的论坛就是专为初学者而生

fire 发表于 2013-11-25 13:05:48

yukaigogogo 发表于 2013-11-23 15:52 static/image/common/back.gif
能不能再解释的详细一点,完全不懂

a 是 (char*) 类型的
&a 是 char (*) 类型的

a + 1 就是 (int)a + sizeof(char) = a 的地址值 加 1 ,即 a 的地址
&a + 1 就是 (int)a + sizeof(char (*) ) = a的地址值 + 4*1 ,即 a 的地址

fire 发表于 2013-11-25 13:16:38

JudeScorpio 发表于 2013-11-21 08:19 static/image/common/back.gif
问什么在VC6.0编译器下,调试环境中,&a+1 和a+1 的 地址都是一样的?
图片不能直接复制过来,要 点击上面的上传图片工具(切换到高级模式)

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

sarjet 发表于 2013-11-26 16:57:55

B吧...少于10字符- -

飞鸿印雪 发表于 2013-12-2 11:00:11

抢沙发~我来顶楼主的:loveliness:抢沙发~我来顶楼主的:loveliness:

ゞ從此消失╭ァ 发表于 2013-12-13 14:19:51

随机值吧,输出的是a【1】的地址减1 吧

詹伟彬 发表于 2013-12-20 12:56:32

选择D。输出指针指向对象的长度变了:)

蓝色梦想 发表于 2013-12-24 17:07:38

学习了真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢

www12www 发表于 2014-1-7 08:55:13

逻辑上认为是4,即答案为C,
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【每日一题讲解】数组名加减的问题