c++ 数组作为函数参数存在的退化问题

引用参考狄泰软件唐老师课程,有兴趣淘宝店铺搜索狄泰软件

常见的数组参数,一维数组,指针数组,二维数组
常见的是一维数组
下面的代码是等价的

void test(int a[]) {

}
void test1(int a[5]) {
}
void test1(int a[3]) {
}
void test2(int *a) {

}

相信经常写代码的你知道,一维数组当作函数参数的时候和指针一样,这是因为当使用数组名传递数组,数组名相当于数组首元素的指针
如果是值变量,会发生拷贝,这将影响效率也可能导致栈内存溢出,所以c++使用指针
对于上面的函数通常做法,是增加一个代表长度信息length的参数,否则函数内部无法知道长度信息
图片总结

值得注意的是,无法传递一个任意维度的数组,必须提供除了第一维之外的长度信息,需要用于指针运算
说到这里要说一下,其实二维数组就是多个一维数组组合的,是一维数组顺次拼接成的
多维数组的函数参数只有第一维是变化的,其余维都是大小已经确定

posted @ 2020-05-12 22:08  make_wheels  阅读(359)  评论(0编辑  收藏  举报