C/C++中数组作函数参数的退化问题

本文详细探讨了C/C++中数组作为函数参数时的退化问题,包括一维数组退化为一级指针,指针数组退化为二级指针,以及二维数组退化为数组指针的情况。通过实例分析,揭示了这种退化现象的原因及其实现机制,强调了在函数调用中传递数组时需要注意的细节。

C/C++中数组作函数参数的退化问题

所谓退化是指在调用函数时,有些情况下形参和实参数据类型会不一致。
为什么会退化?因为C/C++编译器在将数组作为函数参数传递时不会拷贝整个数组,而只会将数组的地址传给函数,以节省内存和时间。
首先给出结论:
  一维数组nums[10]在函数间传递时会退化为一级指针*P
  指针数组*P[5]退化为二级指针**P
  二维数组nums[2][5]退化为数组指针(*P)[5]

一、一维数值退化为一级指针

一维数组nums在函数调用过程中退化为一级指针*p,如下(!!!注意:一般数组做函数参数时还必须将数组的长度作为一个参数值传递过去,这里的示例只是为了方便,并不规范。)在这里插入图片描述
运行结果:在这里插入图片描述
数组原本所占内存大小为40个字节,传递给函数之后只有4字节。即一维数组退化为一级指针。

二,指针数组退化为二级指针

首先区分指针数组*P[ ]和数组指针(*P)[ ],因为运算符的优先级[ ]比*高,对于*P[ ],P先和[]结合,所以首先是一个数组,然后和*结合表示用来存放指针,因此*P[ ]代表指针数组。而对于(*P)[ ],P首先和*结合代表一个指针,然后再和[]结合代表是指向数组的指针。

指针数组*P[ ]退化为二级指针**P,(需要加const,代表只读)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值