CPP学习之——将数组传递给函数(14.15-16)

一 概述

我们用一个计算100到199间所有书的平均值的程序,来演示一下数组如何在函数中传参。

二 实现分析

  • 写出该程序不可避免的要用到数组和函数,并且要将数组作为参数传递给函数,前面的课程中我们了解到数组因为通常都比较大,所以为了节省内存,C++规定数组在程序中只能有一个原本,基于这个原因,数组在函数中是不可能再创造一个副本的。因此我们传给函数的数组都是该数组第一个元素的地址,即数组名,这就是我们常说的按地址传递

三 按值传递与按址传递数组

我们来对比一下按值传递与按址传递数组的区别:

  • 按值传递要将整个数组复制一份存放在栈中,然后在函数中接受该数组的拷贝。因此缺点是耗费内存比较大。优点则是在函数中修改数组的元素不会影响到原始数组
  • 但是为了节省内存,C++规定数组在程序中只能有一个原本,这样我们就无法实现这种传递方式了。按地址传递克服了值传递方法的缺点。在地址传递方法中,传递给函数的是指向初始函数数组的指针,不用复制数组,因此程序变得简练,也节省了栈中的内存空间。在地址传递过程中,只需在函数原型中将函数的参数说明为数组第一个元素的内存地址,即数组名,我们通常都是使用这种方法

四 示例演示及结果输出

4.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
using namespace std;
float average(int *,int);
int main()
{
int a[100];
float averageVal;
int num=100;
for(int i=0;i<100;i++)
{
a[i]=num;
num++;
cout<<a[i]<<endl;
}
averageVal=average(a,100);
cout<<"100-199的平均值为:"<<averageVal<<endl;
return 0;
}
float average(int *p,int total)
{
int sum=0;
for(int i=0;i<total;i++)
{
sum=sum+p[i];
}
return (float)sum/total;
}

4.2 输出结果

1
100-199的平均值为:149.5

五 数组元素的和

5.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
int sum(int [],int);
int main()
{
int a[]={22,99,34,66,89};
int size=sizeof(a)/sizeof(int);
//cout<<sizeof(a)/sizeof(int)<<endl;
cout<<"数组a所有元素相加的和为:"<<sum(a,size);
return 0;
}
int sum(int a[],int n){
int sum=0;
for(int i=0;i<n;i++){sum=sum+a[i];}
return sum;
}

5.2 输出结果

1
数组a所有元素相加的和为:310