java将数组传给函数_C++ 传递数组给函数 | 菜鸟教程

根据教程及楼上我又修改了一下代码,看看三种方法中形参 arr 所占内存大小。

#include

using namespace std;

double getAverage(int *arr, int size); //形式参数是一个指针:

double getAverage(int arr[5]); // 重载函数,形式参数是一个已定义大小的数组:

double getAverage2(int arr[]); // 不可重载,形式参数是一个未定义大小的数组:

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, avg2, avg3;

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

cout << "pt1_size : " << pt1_size << endl;

avg = getAverage(balance, 5);

avg2 = getAverage(balance);

avg3 = getAverage2(balance);

// 输出返回值

cout << "方法1平均值是:" << avg << endl;

cout << "方法2平均值是:" << avg << endl;

cout << "方法3平均值是:" << 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;

}

double getAverage(int arr[5])

{

int i, sum = 0, size = 5;

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;

}

double getAverage2(int arr[])

{

int i, sum = 0, size = 5;

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

Inside getAverage sizeof(arr) = 8

Inside getAverage sizeof(arr) = 8

方法1平均值是:214.4

方法2平均值是:214.4

方法3平均值是:214.4

结论:

三种方法都是通过指针完成数组传递,arr 都占用 8 字节内存,虽然表面形式不一样。具体原因我也不清楚,希望有高手具体解答。

YoungWilliam

YoungWilliam

you***illiam.zheng@gmail.com2年前 (2019-04-05)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值