先看一下我写的答案
6.24
const int ia[10],传递的是一个指针,并不是数组(或者说数组的本质就是指针),我们应该使用reference来告诉它,我们传递的是 ”数组”
改正:
#include<iostream>
void print(const int (&ia)[10])
{
for (size_t i = 0; i != 10; ++i)
std::cout << ia[i] << std::endl;
}
int main() {
int ia[10]={0,1,2,3,4,5,6,7,8,9};
print(ia);
}
但是我发现如果我用的下面这样的也行:
#include<iostream>
void print(const int ia[10]) //const int (&ia)[10]
/*但是可能会出现问题,因为这个本质上是声明传入一个指针(const int*),也就是说你传入一个不指向数组的指针,也会被编译器检查通过,而你原本想传入的是一个"数组 " so array types cannot be function parameter or return types.*/
{
for (size_t i = 0; i != 10; ++i)
std::cout << ia[i] << std::endl;
}
int main() {
int ia[10]={0,1,2,3,4,5,6,7,8,9};
print(ia);
}
这个故事告诉我们,当一个数组作为函数参数或者返回值的时候,他其实是一个指针,我们应该尽量避免出现这种情况,实在要用,可以尝试使用引用,当然你也可能返回函数局部变量的引用的错误,请你使用的时候多加注意。