函数中的数组参数
1.在函数中一般用指针处理数组。
在大多数情况下, C++和C 语言一样,也将数组名视为指针。C++将数组名解释为其第一个元素的地址:
cookies == &cookies[0]
改规则有一些例外:
- 数组声明使用数组名来标记存储位置;
- 对数组名使用sizeof 将得到整个数组的长度(以字节为单位) ;
- 将地址运算符&用于数组名时,将返回整个数组的地址,例如&cookies 将返回一个32 字节内存块的地址(如果int 长4 字节)。
2.实例分析
例:计算一个整型数组中所有元素之和。
#include <iostream>
using namespace std;
const int ArSize = 8;
int sum_arr(Name, ArSize);
int main()
{
int cookies[ArSize] = {1, 2, 4, 8, 16, 32, 64, 128};
int sum = sum_arr(cookies, ArSize);
cout << "Total cookies: " << sum << "\n";
system("pause");
return O;
}
// return the sum of an integer array
in sum_arr(int arr[], int n)
{
int total = O;
for (int i = O; i < n; i++)
total= total+ arr[i];
return total;
}
函数调用: int sum= sum_arr(cookies, ArSize);
其中,cookies 是数组名,而根据C++规则, cookies 是其第一个元素的地址,因此函数传递的是地址。由于数组的元素的类型为int, 因此cookies 的类型必须是int 指针, 即int* 。这表明, 另一种正确的函数头应该是这样的:int sum_arr (int * arr, int n ) // arr = array name, n = size
sum_arr( )函数将cookies 的地址赋给指针变量arr, 将ArSize 赋给int 变量n 。这意味着,程序中并没有将数组内容传递给函数,而是将数组的位置(地址) 、包含的元素种类(类型)以及元素数目( n 变量)提交给函数。如图1所示。
图1.函数中有关数组参数的信息