我看到一个看起来像这样的函数
int foo(int array[100])
{
...
}
Run Code Online (Sandbox Code Playgroud)
这有什么不同
int foo(int *array)
Run Code Online (Sandbox Code Playgroud)
有什么不同吗?
在哪些地方应该/我们可以使用前一种方法.
它们在功能上是相同的.您应该使用第二种方法并传递一个参数作为数组的长度.
否则,你要求麻烦:
// this will compile without warning, even if using -Wall
int myArray[50] = {0};
foo(myArray);
Run Code Online (Sandbox Code Playgroud)
如果foo() 假定该阵列实际上是100个元素长,它将溢出阵列.
更好的方法:
int foo(int *array, size_t array_len) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
更好的是,使用a vector,它带有它的大小,你不能(在正常情况下)访问超出向量的末尾:
int foo(const std::vector<int>& array) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)