6. 数组形参

6.1. 非引用

当数组以 非引用 类型传递,数组会悄悄退化为指针,形参复制的是这个指针的值(指向数组第一个元素)。通过该形参做的任何改变都是在修改数组元素本身。

 1void func1(int arr[100])
 2{
 3    cout << sizeof(arr) << endl; // 指针的大小为4(32位编译器)
 4    /*
 5        function body
 6    */
 7}
 8
 9void func2(int *arr)
10{
11    cout << sizeof(arr) << endl; // 指针的大小为4(32位编译器)
12    /*
13        function body
14    */
15}
16
17int a[10] = {1,2,3};
18func2(a);

6.2. 引用

如果形参是数组的 引用 ,编译器不会将数组实参转化为指针,而是传递数组的引用本身。编译器会检查数组实参的大小与形参是否匹配。

 1void func1(int (&arr)[10])
 2{
 3    cout << sizeof(arr) << endl; // 大小为4*10=40(32位编译器)
 4    /*
 5        function body
 6    */
 7}
 8
 9int a[10] = {1,2,3};
10func2(a);