我理解到指针的隐式转换。今天有人在其他问题中提出了这样的建议:
#include <iostream>
void printArray(int (&a)[5]) {
for (int i : a) {
std::cout << i << " ";
}
}
int main() {
int a[] = { 1, 2, 3, 4, 5 };
printArray(a);
}
问题
这是将整个数组传递给函数的唯一也是最好的方法,而不仅仅是指向第一个元素的指针(尽管效率低下)吗?
但是,如果该函数写在主函数下面,函数原型(prototype)会是什么?
此外,如果我只使用增强的 for 循环来遍历传递给函数的数组元素,有没有更好的方法?
最佳答案
1) 这不会将整个数组传递给函数。它传递对数组的引用。由于编译器知道参数的类型,因此它能够进行适当的检查(在调用函数时)并访问数组元素(在函数内)。
2) 函数的声明(相对于定义/实现)将是;
void printArray(int (&a)[5]);
这里参数的名称(a
)是可选的。
3) 由于打印对象(包括数组)通常不会更改对象,因此 printArray()
的参数为 const
是合适的 -合格的。这也允许调用者传递一个 const
数组(这在代码中是不可能的,如图所示)。此外,循环中使用的 i
类型也可以是 const
引用(避免按值复制数组元素)。也可以使用自动类型推断(即 auto
)。增加 const
-safety 通常被认为是有益的(因为它增加了尝试修改不应更改的内容的机会)。
关于c++ - 如何防止数组在传递给函数时被解释为指向第一个元素的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655069/