我理解隐式转换为指针。今天有人在其他问题上提出了类似的建议:
#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);
}
这是将整个数组传递给函数的唯一和最好的方法,而不仅仅是指向第一个元素的指针(虽然效率低下)?
但是,如果要将该函数写在main函数下面,那么函数原型是什么?
另外,如果我只使用增强的for循环遍历传递给函数的数组的元素,还有更好的方法吗?
答案 0 :(得分:2)
1)这不会将整个数组传递给函数。它传递对数组的引用。由于编译器知道参数的类型,因此能够进行适当的检查(在调用函数时)和访问数组元素(在函数内)。
2)函数的声明(与定义/实现相对)将是;
void printArray(int (&a)[5]);
参数的名称(a
)在此可选。
3)由于打印对象(包括数组)通常不会更改对象,因此printArray()
的参数为const
是合格的。这也允许调用者传递const
数组(这在代码中是不可能的,如图所示)。此外,循环中使用的i
类型也可以是const
引用(这可以避免按值复制数组的元素)。也可以使用自动类型推断(即auto
)。增加const
- 安全性通常被视为有益(因为它增加了尝试修改不应更改的内容的机会)。