《我的第一本C++书》节选:5.1.4 函数参数的传递
http:www.chenlq.net
5.1.4 函数参数的传递
我们可以把东西放进箱子中,同样,通过函数参数的传递,也可以将数据放到函数箱子中。我们知道,函数是用来完成某个相对独立功能的模块。函数在完成这个功能的时候,往往需要外部数据的支持,这时就需要在调用这个函数时向它传递所需要的数据。例如,当调用一个加法函数时,需要向它传递两个数作为加数和被加数。在定义一个函数的时候,如果这个函数需要跟外部进行数据交换,就会在函数定义中加入形式参数表,通过形式参数表可以将数据从函数外部传入函数内部。例如,可以这样定义一个加法函数:
// 声明并定义Add函数
// 用形式参数表来表示这个函数需要跟外界进行数据传递
int Add( int a, int b )
{
return a + b;
}
从Add()函数的声明中可以知道这个函数需要两个整型数作为参数,所以可以在调用的时候给它传递两个整型数作为参数:
// 以1和2作为参数调用Add()函数
// 也就是向这个函数传递1和2这两个数据
int nResult = Add(1, 2);
我们将在函数调用时给出的参数称为实际参数,例如1和2就是实际参数。在进行函数调用的时候,系统会使用调用函数时给出的实际参数分别对函数声明中的各个形式参数进行赋值。例如,这里1和2两个参数分别会赋值给Add()函数的两个形式参数a和b,也就是说,在Add()函数内部,a和b两个变量的值这时就是1和2,这样就通过实际参数和形式参数实现了从函数外部向函数内部传递数据,如图5-6所示。
clip_image002
图5-6 函数调用过程中的参数传递
在函数调用的时候,系统需要将实际参数复制给形式参数,如果要向函数内部传递一些比较大的数据,为了提高效率,则可以用传递指向这个数据的指针来代替传递整个数据。在函数内部,通过指针来访问数据,同样可以达到向函数内部传递大数据的目的。例如,可以通过传递数组的指针向函数传递一个数组。利用这种方式,可以用一个函数来封装“豪华工资统计”程序中的统计平均工资部分,并通过向它传递数组指针来实现整个工资数组的统计:。
// 计算平均工资
float GetAverageSalary( int* pSalary, const int MAX_NUM )
{
// 计算工资总和
int nTotal = 0; // 工资总和
for( int i = 0; i < MAX_NUM; ++i )
{
nTotal += pSalary[i];
}
// 平均工资 = 工资总和 / 员工数
return (float)nTotal / MAX_NUM;
}
在GetAverageSalary()函数的声明中,我们定义了两个形式参数,第一个表示需要统计的数组的指针,因为数组的指针并没有函数数组元素个数的信息,所以还需要用第二个形式参数来表示这个数组中元素的个数。这样,就可以在函数内部通过数组指针来访问整个数组,完成统计功能。 在调用GetAverageSalary()函数的时候,按照函数的声明,可以以数组的首地址和数组元素个数作为实际参数对其进行调用:。
// 定义数组
const int MAX_NUM = 100;
int nSalary[MAX_NUM];
// …
// 调用GetAverageSalary函数
float fAverageSalary = GetAverageSalary(nSalary, MAX_NUM );
就这么简单,使用指针可以轻松地将数组这头大象放进函数这个小箱子。
[解决办法]
学习了,大神啊