在大多数情况下, C++和C 语言一样,也将数组名视为指针。C++将数组名解释为其第一个元素的地址:
cookies == &cookies[0]
改规则有一些例外:
- 数组声明使用数组名来标记存储位置;
- 对数组名使用sizeof 将得到整个数组的长度(以字节为单位) ;
- 将地址运算符&用于数组名时,将返回整个数组的地址,例如&cookies 将返回一个32 字节内存块的地址(如果int 长4 字节)。
例:计算一个整型数组中所有元素之和。
#includeusing 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.函数中有关数组参数的信息



