考虑以下C / C ++函数:
void print_array_1(int arr[4]) {
for (int i = 0; i < 4; ++i) {
std::cout << arr[i] << std::endl;
}
}
void print_array_2(int arr[]) {
for (int i = 0; i < 4; ++i) {
std::cout << arr[i] << std::endl;
}
}
当将四元素数组传递给每个函数时,它们都做同样的事情。
有什么真正的区别吗? arr
只是指向一大块内存的指针,因此看起来它们应该是等价的。
答案 0 :(得分:2)
不,没有区别。
正式论证
int arr[4]
衰败到
int* arr
这意味着您可以将其视为函数内部的可修改指针变量,这也意味着有关数组大小的所有信息都已消失。
为正式参数指定和要求某个数组大小的一种方法是使用std::array
:
void foo( std::array<int, 4> const& arr )
另一种方法是通过引用传递原始数组:
void bar( int (&arr)[4] )