A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include <stdio.h>
int main(){
    int a[5]={1,2,3,4,5},*p=a;
    printf("%d\n",*(p+2));
    printf("%d\n",(p+2)[2]);  // 这行是什么意思,为什么可以打印出来5
    return 0;
}

21 个回复

倒序浏览
我感觉,p+2 指向了  第二个元素,,然后把后边的剩余的元素弄成了一个数组(p+2)[2] 代表了第三个元素即5.
回复 使用道具 举报
勇猛的小黑 发表于 2015-11-7 15:29
我感觉,p+2 指向了  第二个元素,,然后把后边的剩余的元素弄成了一个数组(p+2)[2] 代表了第三个元素即5 ...

错错错。p+2指向了第三个元素的首地址
回复 使用道具 举报
勇猛的小黑 发表于 2015-11-7 15:29
我感觉,p+2 指向了  第二个元素,,然后把后边的剩余的元素弄成了一个数组(p+2)[2] 代表了第三个元素即5 ...

很接近了  
回复 使用道具 举报
这个你就要深入理解一下指针和数组啦,其实这个问题很好理解。首先a表示的是数组的首地址,如果要去除里面的值有好几种方式都是等价的。比如你要获取第二个元素(下表为1)。
a[1] 或者*(a+1) 如果理解的透彻的话 [1]a也是可以的。
对数组名称或者指针进行算数操作的时候有两个点需要注意:指针的类型决定每次跳跃的距离。相加的数决定跳跃几次。
比如a+1,a的类型是  int,所以+1之后会跳跃到下一个值。理解了这些的话,再去看你的那个题,就很好理解了。p指向的是a,所以指针p和a的类型是一样的。
*(p+2)  这个就表示 取第三个元素。所以值为3
(p+2)[2]);  这个首先看p+2,跳到了第三个元素,然后【2】表示也是+2的意思就是取第五个元素,自然就是5了。
回复 使用道具 举报
正在输入中... 发表于 2015-11-7 16:41
这个你就要深入理解一下指针和数组啦,其实这个问题很好理解。首先a表示的是数组的首地址,如果要去除里面 ...

赞 清楚透彻
回复 使用道具 举报
本帖最后由 Morning_jcg 于 2015-11-7 17:15 编辑

结构上,a[2]和*(a+2)是一样的,,或者说a[2]其实就是通过*(a+2)来实现的。
回复 使用道具 举报
正在输入中... 发表于 2015-11-7 16:41
这个你就要深入理解一下指针和数组啦,其实这个问题很好理解。首先a表示的是数组的首地址,如果要去除里面 ...

学习了!!!!!!
回复 使用道具 举报
我认为是p+2指向的是第三个元素,也就是假使这个数组的首地址,那么输出的(p+2)[2]就是他的第5个元素了
回复 使用道具 举报
正在输入中... 发表于 2015-11-7 16:41
这个你就要深入理解一下指针和数组啦,其实这个问题很好理解。首先a表示的是数组的首地址,如果要去除里面 ...

666666666666
回复 使用道具 举报
p+2 指向了  第3个元素,,然后把后边的剩余的元素弄成了一个数组(p+2)[2] 代表了第三个元素即5.
回复 使用道具 举报
指针都是算计
回复 使用道具 举报
表示指针还没看呢
回复 使用道具 举报
Marlong 发表于 2015-11-9 23:06
表示指针还没看呢

那应该早点看,嘿嘿、哪里还是比较容易晕的。。。。一定要挺住
回复 使用道具 举报
陆露 中级黑马 2015-11-11 22:32:45
15#
(P+2) = P ;
回复 使用道具 举报
865393462 来自手机 中级黑马 2015-11-11 22:36:15
16#
6666666666666
回复 使用道具 举报
Venus_1991 来自手机 中级黑马 2015-11-12 08:19:10
17#
66666666666
回复 使用道具 举报
(p+2)[],首地址为p+2的数组,这里p+2指向3,则(p+2)[0]->3,(p+2)[1]->4,(p+2)[2]->5
回复 使用道具 举报
6666666666666666666666666666666666666666666666666666
回复 使用道具 举报
真是666666
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马