数组名退化作一个元素的指针,降级

本文详细介绍了在C/C++中数组名如何自动转换为指针,包括指针与数组的关系、转换规则及特殊情况。此外,还探讨了在不同上下文中数组名的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一篇博客方便自己复习。


参考网址:https://www.cnblogs.com/sanghai/archive/2013/11/01/3402258.html

数组名退化为指针:

在使用数组时,大多数情况下数组都会自动转换为指向第一个元素的指针,例如: 

int a[10]; // array of 10 ints 
int* p = a; // convert a to pointer to first element ,这里也就是退化成了 int *p=&a[0];


  这里不能对数组名作引用(在这里也就是取地址),否则就是数组类型的指针,并不能退化成一个元素的指针

不能写成这样 int*p=&a;

(数组可以这么理解, int[10]  a, a是一个拥有十个int型的变量,若对a取地址,则就是一个有10个int型的地址,并不是单个元素的指针)


不将数组转换为指针的例外情况有:
1. 数组用作取地址(&)操作符的操作数
2. sizeof 操作符的操作数时 (sizeof求数组长度)
3. 用数组对数组的引用进行初始化时,不会将数组转换为指针。
    int val[6] = {1,2,3,4,5,6};

    int (&b)[6] = val;             




第一次发博客,若有什么错误,请指出,欢迎交流,感谢。

版权声明:本文为博主原创文章,未经博主允许不得转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值