C语言中指针与函数的关联2(数组的降级)

    上一篇讲过数组名发生降级的问题,说的还不够详细,这里我们给一份代码

int main()
{
int arr[10] = { 0 };
int *p1 = (&arr)+1;
int *p2 = arr + 1;
return 0;
}

    然后我们进入调试,监视变量p1,p2,让程序走起来,监视结果如下:

wKioL1ZOt9nxHcIEAAArXz_aw2A238.png    这里我们看到arr的地址为002cfe48,p1的地址为002cfe70,p2为002cfe4c,由于arr首元素的地址为fe48当我们对其向后偏移一个字节,对arr实行了加法运算,数组发生降级,代表首元素的地址,换算成16进制,48+4=4c,得到的是p2=fe4c,而如果我们队arr进行取地址,因为&不会使数组发生降级的,arr有10个单位,每个单位4字节,所以70-48=28,换算成16进制,刚好为40。

    这样我们就清楚地看到数组的降级,数组与指针的区别了。


本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1715016

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值