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,代表只读)

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

被折叠的 条评论
为什么被折叠?



