【C++】《C++ 17 入门经典》读书笔记 16 ---- 给函数传送数组

一、概述:

因为数组名本质上是地址,所以也可以使用数组名将数组的地址传送给函数。此时,会复制数组的地址,并传送给函数。这样做有许多优点:

首先,给函数传送数组的地址要比传送数组更高效。按值传送数组的所有元素会很费时间,因为需要复制每个元素。实际上,数组不能作为一个实参按值传送每个元素,因为每个参数都表示一个单独的数据项。

其次,也是更重要的,函数不处理原始数组变量,但通过副本,函数体中的代码可以把表示数组的参数作为指针来看待,包括修改它包含的地址。这意味着函数体中可以给数组参数使用指针表示法的强大功能。

二、程序示例:

使用数组表示法处理数组参数。

#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);

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值