为了账号安全,请及时绑定邮箱和手机立即绑定

int *p=&a[5]该怎么去理解?

int *p=&a[5]该怎么去理解?

C
荒小北158 2017-01-06 10:17:27
今天看到这样的题目 int a[] = {5,15,34,54,14,2,52,72}; int *p = &a[5];则p[2]的值为?  //老师给的答案是54     我很摸不着头脑!这个int *p = &a[5]  是理解成 定义一个指针变量 把数组变量a中第六个单元(值为2)的地址给这个指针变量p吗?//*p==2  ???求大神解惑!谢谢了!
查看完整描述

5 回答

已采纳
?
Xyino_Snake

TA贡献31条经验 获得超22个赞

我认为你给出的老师的答案有误。可能是这位老师不小心搞错了。是72。也就是最后一个元素的值。解引用无非也就是把目标元素的地址取出。这里直接保存在了int指针里。这个指针偏移2,显然就是原始数组最后一个元素。
查看完整回答
反对 回复 2017-01-07
?
小辉辉学编程

TA贡献2条经验 获得超3个赞

老师的答案有问题吧,我认为p[2]的值应该是72啊,p是一个指针指向a[5]那个地址,所以*p就是a[5]的值,p[2]应该是a[7]的值,应该是72吧。

查看完整回答
3 反对 回复 2017-01-06
?
眼前的黑不是黑zz

TA贡献57条经验 获得超42个赞

对,理解没错啊。对p解引用。*p 的值就是2.

查看完整回答
1 反对 回复 2017-01-06
  • 荒小北158
    荒小北158
    上机验证了一下 老师的答案给错了 我还以为我理解错了
  • 眼前的黑不是黑zz
    眼前的黑不是黑zz
    行,那ok了,答案错了很正常,所以别盲信答案,要去思考答案是否正确。
?
DOUBLE_l

TA贡献45条经验 获得超12个赞

p[2]等于72,*p等于2
查看完整回答
1 反对 回复 2017-01-06
  • 荒小北158
    荒小北158
    答案是54啊 按照你的答案 int *p=&a[5] 就是 p[0]==a[5] 了?
?
weixin_慕娘4038219

TA贡献1条经验 获得超0个赞

我的题目是:

    int a[] = {5,15,34,54,14,2,52,72};

    int *p = &a[5];

    printf("%d\n", p[-2]);

        return 0;

*p 等价与 p[], 可以理解为p也是一个新数组, p[0]z这个地方存a[5]的值, 即2, 

p[-2] 就是从 0 开始 往前数 2 个, 就是54.

下面经过xcode 验证结果:


72

Program ended with exit code: 0


查看完整回答
反对 回复 2019-05-02
?
tangxiao

TA贡献1条经验 获得超0个赞

你这题目写错了吧!是P[-2]吧

查看完整回答
反对 回复 2018-01-25
?
DOUBLE_l

TA贡献45条经验 获得超12个赞

多上机验证,多实验。
查看完整回答
反对 回复 2017-01-06
  • 5 回答
  • 0 关注
  • 7444 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信