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

数组名取地址

数组名取地址

海绵宝宝撒 2019-04-19 16:12:43
intmain(){intc[]={1,2,3,4,5};int*pt=(int*)(&c+1);printf("%d\n",*(pt-1));pt=(int*)(c+1);printf("%d\n",*(pt-1));return0;}输出:5,1;请问第一次输出为什么是5,数组名就是地址了,再取地址变成了什么?
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

再取一次就是行指针。所以&c+1就指向了数组的下一行,也就是5后面的那个地址。C没有数组越界的检查,只会根据语法控制指针的加减(指向)。
                            
查看完整回答
反对 回复 2019-04-19
?
慕容森

TA贡献1853条经验 获得超18个赞

c表示&c[0],也即对数组首元素取地址,c+1表示首地址+sizeof(元素类型)。
&c虽然值为数组首元素地址,但类型为:类型(*)[数组元素个数],所以&c+1大小为:首地址+sizeof(c)。
所以,
c代表数组首元素地址,
&c代表整个数组地址
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 610 浏览
慕课专栏
更多

添加回答

举报

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