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

第三行下标不是已经超过范围了吗,为什么会这样?

第三行下标不是已经超过范围了吗,为什么会这样?

C
Single丶love 2016-08-15 16:49:05
第三行下标不是已经超过范围了吗?那个内存空间不是没有定义的吗?为什么会这样?
查看完整描述

2 回答

?
凌小天3635910

TA贡献17条经验 获得超13个赞

int a[]={1,2,3,4,5};    //定义一个整形数组大小为5int
int *p=a;               //定义一个指针变量p,将数组a首地址赋值给p。
int *p=&a[5];           //定义一个指针变量q,将数组首地址后5个int位的地址赋值给p
                        //&a[5]等价于(a+5).既a地址后5int位。
printf("%d",q-p);       //输出q地址减去p地址的大小。


查看完整回答
1 反对 回复 2016-08-15
  • Single丶love
    Single丶love
    但是数组只有5个int大小啊,a[5]不就是数到地6个么?那里不是没有定义的吗?
  • 凌小天3635910
    凌小天3635910
    有没有定义不重要 。因为这里运算的不是数据。而是地址。地址是内存的一段段空间。是实实在在存在的。
?
委屈的宝宝

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

的确没有定义,但是&a[5]只是取个地址,就是一次加法运算,也就是地址偏移。

查看完整回答
反对 回复 2016-08-15
  • 2 回答
  • 0 关注
  • 1523 浏览

添加回答

举报

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