一、概述:
因为数组名本质上是地址,所以也可以使用数组名将数组的地址传送给函数。此时,会复制数组的地址,并传送给函数。这样做有许多优点:
首先,给函数传送数组的地址要比传送数组更高效。按值传送数组的所有元素会很费时间,因为需要复制每个元素。实际上,数组不能作为一个实参按值传送每个元素,因为每个参数都表示一个单独的数据项。
其次,也是更重要的,函数不处理原始数组变量,但通过副本,函数体中的代码可以把表示数组的参数作为指针来看待,包括修改它包含的地址。这意味着函数体中可以给数组参数使用指针表示法的强大功能。
二、程序示例:
使用数组表示法处理数组参数。
#include <iostream>
#include <array>
double average(double array[], size_t count);
int main()
{
double values[]{ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 };
std::cout << "Average = " << average(values, std::size(values)) << std::endl;
}
double average(double array[], size_t count)
{
double sum{};
for (size_t i{}; i < count; ++i)
sum += array[i];
return sum / count;
}
注意:不能通过在 average() 函数中使用 sizeof 运算符或 std::size() 函数避免指定 count 参数。
记住:数组参数(如 array)只是存储数组的地址,而不是数组本身。因此,表达式 sizeof(array) 将返回保存数组地址的内存位置的大小,而不是整个数组的大小。
编译器认为下面的两个函数原型完全相同:
double average(double array[], size_t count);
double average(double* array, size_t count);