Learning C++之1.4a 形式参数和实际参数

形式参数和实际参数:

之前的课程中我们讲过函数可以通过return函数返回相应的值。

在大多数情况下,函数也需要接受一定的参数来进行处理。举个例子,我们需要一个计算两个值和的函数。这个时候该函数就需要输入两个值。

形式参数就是函数命名的时候括号里面的参数,多个参数用,隔开。下面是几个例子:

// This function takes no parameters
// It does not rely on the caller for anything
void doPrint()
{
    std::cout << "In doPrint()" << std::endl;
}
 
// This function takes one integer parameter named x
// The caller will supply the value of x
void printValue(int x)
{
    std::cout << x  << std::endl;
}
 
// This function has two integer parameters, one named x, and one named y
// The caller will supply the value of both x and y
int add(int x, int y)
{
    return x + y;
}

每个函数的参数都只在函数内部有效,因此即使printValue和add函数有相同名字的参数x,其实这两个x是毫不相关的。

实参就是实际传递给函数的参数值如下面所示:

printValue(6); // 6 is the argument passed to function printValue()
add(2, 3); // 2 and 3 are the arguments passed to function add()

实参的数目必须要和形式参数相同,否则编译器会报错。

形式参数和实际参数是如何工作的:

当一个函数被调用的时候,函数所有的参数都是作为变量来控制的,每一个变量的值都会匹配到相应的参数中。这个过程叫做值传递。

//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>
 
// This function has two integer parameters, one named x, and one named y
// The values of x and y are passed in by the caller
void printValues(int x, int y)
{
    std::cout << x << std::endl;
    std::cout << y << std::endl;
}
 
int main()
{
    printValues(6, 7); // This function call has two arguments, 6 and 7
 
    return 0;
}

参数和返回值是怎么工作的:

通过使用返回值和参数,我们可以创建一个函数,有输入值,也有输出值。下面是一个例子:

//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>
 
// add() takes two integers as parameters, and returns the result of their sum
// The values of x and y are determined by the function that calls add()
int add(int x, int y)
{
    return x + y;
}
 
// main takes no parameters
int main()
{
    std::cout << add(4, 5) << std::endl; // Arguments 4 and 5 are passed to function add()
    return 0;
}

执行过程如下图:


下面是一个更加复杂的例子:

//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>
 
int add(int x, int y)
{
    return x + y;
}
 
int multiply(int z, int w)
{
    return z * w;
}
 
int main()
{
    std::cout << add(4, 5) << std::endl; // within add(), x=4, y=5, so x+y=9
    std::cout << multiply(2, 3) << std::endl; // within multiply(), z=2, w=3, so z*w=6
 
    // We can pass the value of expressions
    std::cout << add(1 + 2, 3 * 4) << std::endl; // within add(), x=3, y=12, so x+y=15
 
    // We can pass the value of variables
    int a = 5;
    std::cout << add(a, a) << std::endl; // evaluates (5 + 5)
 
    std::cout << add(1, multiply(2, 3)) << std::endl; // evaluates 1 + (2 * 3)
    std::cout << add(1, add(2, 3)) << std::endl; // evaluates 1 + (2 + 3)
 
    return 0;
}

前两行非常明确,第三行就是表示算式也可以作为参数,把起最终的计算结果给参数就可以了。

第四种add(a,a),前面定义了a为5。所以函数也就是add(5,5)

第五和第六中都是函数中调用函数,需要从里往外运算结果。

结论:

参数是使函数具有可重用性的关键机制,因为他允许在不知道输入值的情况下执行任务。这些输入值被调用者给传入。

返回值允许函数返回一个值给调用者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值