形参、实参以及参数的传递

51 篇文章 1 订阅

形参(Formal Parameter)和实参(Actual Argument)

在函数调用过程中,形参(Formal Parameter)和实参(Actual Argument)是两个相关的概念。

形参是函数定义中声明的参数,用于接收函数调用时传递的实际参数的值。形参在函数定义中作为变量使用,用于在函数体内部进行计算和处理。

实参是函数调用时提供的参数的值,用于传递给函数定义中对应的形参。实参可以是常量、变量、表达式或其他函数调用的返回值。

形参和实参之间的关系如下:

  1. 形参的数量和类型必须与实参的数量和类型匹配,即在函数调用时,提供的实参个数和类型要与函数定义中的形参一致。

  2. 在函数调用时,可以通过以下方式将实参传递给形参:

    • 位置匹配:实参按照形参的顺序进行对应,位置相同的实参传递给对应的形参。

    • 关键字匹配:通过指定形参的名称来传递实参,可以改变实参的顺序。

  3. 传递实参给形参时,实参的值被复制到形参中,函数内部对形参的修改不会影响实参的值。

示例:

void multiply(int a, int b) {
    int result = a * b;
    std::cout << "Result: " << result << std::endl;
}
​
int main() {
    int x = 5, y = 3;
    multiply(x, y);  // 实参 x 和 y 被复制到形参 a 和 b 中
    return 0;
}

在上面的示例中,multiply()函数接受两个形参 ab,在函数调用时,将实参 xy 传递给对应的形参。函数体内部使用形参进行计算,不会影响实参的值。

通过形参和实参的配合使用,可以将数据传递给函数,使函数能够处理和操作传递的数据。这种参数传递机制允许在函数调用时动态地传递不同的数据,并使函数能够在不同的上下文中重复使用。

参数传递方式

值传递(Pass by Value)、指针传递(Pass by Pointer)和引用传递(Pass by Reference)是三种常见的参数传递方式,用于将数据传递给函数。它们之间的区别如下:

  1. 值传递:

    • 形参是在函数定义中声明的变量,用于接收实参的值。

    • 在函数调用时,实参的值被复制到形参中,函数内部对形参的修改不会影响实参的值。

    • 值传递适用于简单的数据类型(如整数、浮点数)或需要保护实参不被修改的情况。

    示例:

    void multiply(int a) {
        a = a * 2;  // 修改形参 a,不影响实参的值
        std::cout << "Value inside function: " << a << std::endl;
    }
    ​
    int main() {
        int x = 5;
        multiply(x);  // 通过值传递将 x 的值传递给形参 a
        std::cout << "Value outside function: " << x << std::endl;
        return 0;
    }

  2. 指针传递:

    • 形参是指针类型,用于接收实参的地址。

    • 在函数调用时,实参的地址被传递给形参,函数内部可以通过解引用指针来修改实参的值。

    • 指针传递适用于需要修改实参的值或传递大型数据结构的情况。

    示例:

    void increment(int* ptr) {
        (*ptr)++;  // 通过指针传递修改实参的值
    }
    ​
    int main() {
        int x = 5;
        increment(&x);  // 通过指针传递 x 的地址给形参 ptr
        std::cout << "Value after increment: " << x << std::endl;
        return 0;
    }

  3. 引用传递:

    • 形参是引用类型,用于直接绑定到实参。

    • 在函数调用时,实参和形参绑定在一起,函数内部对形参的修改会直接影响实参的值。

    • 引用传递适用于需要修改实参的值或传递大型数据结构的情况,同时避免了指针传递的繁琐操作。

    示例:

    void increment(int& ref) {
        ref++;  // 通过引用传递修改实参的值
    }
    ​
    int main() {
        int x = 5;
        increment(x);  // 通过引用传递 x 的引用给形参 ref
        std::cout << "Value after increment: " << x << std::endl;
        return 0;
    }

通过值传递、指针传递和引用传递,可以根据需要选择合适的参数传递方式。需要根据情况考虑是否需要修改实参的值、传递大型数据结构、传递数组或容器等因素,选择适合的参数传递方式。

传地址或者引用时,形参与实参都有相同的地址,形参的改变影响实参。

传值调用时,只是将数据进行了复制,不会改变实参的值。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

What’smean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值