c++ 函数参数的传递

发布时间:2024年01月18日

在 C++ 中,函数参数可以通过值传递、指针传递或引用传递的方式来传递。每种传递方式有其用途和行为特点。理解这些不同之处对于有效地使用 C++ 来说非常重要。

先大概了解一下各个指针的信息,再看实例

值传递(Pass by Value):创建实参的副本,函数中的改动不影响实际的变量。
引用传递(Pass by Reference):实际变量的别名被传递,函数中的改动直接影响实际的变量。
指针传递(Pass by Pointer):变量的地址(指针)被传递,通过指针可以改变实际的变量的值。

在实践中,使用引用传递的好处在于它既能提高效率(避免了不必要的对象复制),又能使代码保持简洁和易于理解,同时避免了指针可能产生的 nullptr 问题。不过,有时使用指针也是必要的,比如在需要传递数组或者需要使用动态内存分配、数据结构和算法(如树和图)等情况下。

接下来我们逐个击破!欢迎大家补充说明!!!

值传递(Pass by Value)

指在调用函数时,实参(调用方的变量)将其值复制给形参(函数内的局部变量)。换言之,函数接收的是实参值的副本。在函数体内对形参所做的修改都不会影响到原始的实参,因为形参仅仅是实参值的一个拷贝。
适用场景
  1. 当你想要保证传入的参数在函数内部不被修改时。
  2. 当参数是基本数据类型(如 int, char, double 等)或者小型对象,它们的复制成本不高时。
优点
  1. 简单易懂,不需要担心在函数外部导致数据被修改。
  2. 对于小型数据和基本数据类型,值传递效率通常很高。
缺点
  1. 对于大型数据结构(如大字符串、向量等),值传递需要复制整个对象到形参,这可能会导致额外的内存和时间开销。
  2. 无法通过函数直接修改实参的值。
使用方法

函数直接接收实参的值的一个副本。对形参的任何修改都不会影响实参本身。
如下,尽管 modifyValue 函数内部修改了变量 x 的值(将其设置为 10),但这个修改并没有影响到 main 函数中的变量 a。这是因为 x 的值只是 a 的副本。

#include <iostream>

void modifyValue(int x) {
   
    x = 10; // 这个修改仅在函数内部有效, 不会影响到调用者传递的实参
    std::cout << "Inside modifyValue: " << x << std::endl;
}

int main() {
   
    int a = 5;
    std
文章来源:https://blog.csdn.net/weixin_43779276/article/details/135657019
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。