在 C++ 中,事物按值传递,除非您使用&
- 运算符(请注意,该运算符也用作“地址”运算符,但在不同的上下文中)。这一切都有据可查,但我还是要重申一下:
void foo(vector<int> bar); // by value
void foo(vector<int> &bar); // by reference (non-const, so modifiable inside foo)
void foo(vector<int> const &bar); // by const-reference
您还可以选择将指针传递给向量(void foo(vector<int> *bar)
),但是除非您知道自己在做什么并且您觉得这确实是正确的选择,否则不要这样做。
另外,向量是not和数组一样!在内部,向量会跟踪一个数组,并为您处理内存管理,但许多其他 STL 容器也是如此。您不能将向量传递给需要指针或数组的函数,反之亦然(您可以访问(指向)底层数组并使用它)。向量是通过其成员函数提供许多功能的类,而指针和数组是内置类型。此外,向量是动态分配的(这意味着大小可以在运行时确定和更改),而 C 样式数组是静态分配的(其大小是恒定的并且必须在编译时已知),这限制了它们的使用。
我建议您阅读更多有关 C++ 的一般知识(特别是阵列衰减),然后看一下下面的程序,它说明了数组和指针之间的区别:
void foo1(int *arr) { cout << sizeof(arr) << '\n'; }
void foo2(int arr[]) { cout << sizeof(arr) << '\n'; }
void foo3(int arr[10]) { cout << sizeof(arr) << '\n'; }
void foo4(int (&arr)[10]) { cout << sizeof(arr) << '\n'; }
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
foo1(arr);
foo2(arr);
foo3(arr);
foo4(arr);
}