C++ 函数参数中数组的大小未指定
我不能理解,所以请帮助我。C++ 函数参数中数组的大小未指定,c++,arrays,function,C++,Arrays,Function,我不能理解,所以请帮助我。 WHRN将数组传递给任意函数,然后在函数参数中写入数组类型,以获取它,但为什么我们不在参数中初始化它的大小。C++中, < P> ,在可能时总是首选容器到原始指针或数组。< /强> < /P> 函数签名中的数组类型实际上是指针。以下三种声明完全相同: void foo(int a[10]); void foo(int a[]); void foo(int* a); 在这三种情况下,foo只接受一个参数:指向int的指针。当您将数组传递给该函数时,它隐式地衰减为指向其
WHRN将数组传递给任意函数,然后在函数参数中写入数组类型,以获取它,但为什么我们不在参数中初始化它的大小。C++中, < P> <强>,在可能时总是首选容器到原始指针或数组。< /强> < /P> 函数签名中的数组类型实际上是指针。以下三种声明完全相同:
void foo(int a[10]);
void foo(int a[]);
void foo(int* a);
在这三种情况下,foo
只接受一个参数:指向int
的指针。当您将数组传递给该函数时,它隐式地衰减为指向其第一个元素的指针
当数组衰减为指针时,数组的长度将丢失。这意味着将编译以下代码,但逻辑上是错误的:
void foo(int a[10]) {
for (size_t i = 0; i < 10; ++i) {
std::cout << a[i] << '\n';
}
}
int main() {
// Whoops, wrong size array!
int arr[5] = {};
foo(arr);
}
当然,您可以指定(固定)数组大小作为函数参数-您必须通过引用传递数组
void func(int (&x)[100]);
正在传递大小为100的int数组
你甚至可以为它制作一个模板
template<class T, size_t N> void func(T (&x)[N]) {...}
template void func(T(&x)[N]){…}
如果我理解您的问题:您不能按值传递C样式数组。他们总是通过地址传递。即使您在参数中添加了一个大小,它也会被一个指向元素类型的指针所取代。“我们将数组传递给任何函数…”-这是什么意思?如何通过?以身作则。一段实际的代码。函数签名中的数组类型实际上是指针
,仅当按值传递时。
void foo(const std::vector<int>& a) {
for (int i : a) {
std::cout << i << '\n';
}
}
int main() {
std::vector<int> arr(5);
foo(arr);
}
template <typename Container>
void foo(const Container& a) {
for (int i : a) {
std::cout << i << '\n';
}
}
int main() {
std::vector<int> arr(5);
foo(arr);
std::array<int, 5> arr2 = {};
foo(arr2);
}
void func(int (&x)[100]);
template<class T, size_t N> void func(T (&x)[N]) {...}