lanaw

函数形参传递的其实是一个指针

如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。

稍微修改了课文中的例子,做一个实验,
#include <iostream>
using namespace std;

double getAverage(int *arr, int size);

int main(int argc, char const *argv[])
{
    // 带有 5 个元素的整型数组
    int balance[5] = {1000, 2, 3, 17, 50};
    int *pt1 = balance;
    // 分别计算数组元素个数,以及整型指针的字节数
    size_t balance_size = sizeof(balance) / sizeof(int);
    size_t pt1_size = sizeof(pt1);

    double avg;

    cout << "array size : " << balance_size << endl;
    cout << "pt1_size : " << pt1_size << endl;

    avg = getAverage(balance, 5);

    // 输出返回值
    cout << "平均值是:" << avg << endl;
    return 0;
}

double getAverage(int *arr, int size)
{
    int i, sum = 0;
    double avg;
    // 打印第一个形参的字节数
    cout << "Inside getAverage sizeof(arr) = " << sizeof(arr) << endl;
    for (int i = 0; i < size; ++i)
    {
        sum += arr[i];
    }

    avg = double(sum) / size;
    return avg;
}

运行结果如下:

array size : 5
pt1_size : 8
Inside getAverage sizeof(arr) = 8
平均值是:214.4

可见,数组的元素个数有 5 个。但是函数中传递的其实是一个指向整型的指针,而整型指针占用 8 个字节。