c++ 函数参数的传递

在 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
  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当我们将函数作为参数传递给另一个函数时,我们可以使用函数指针或函数对象(函数器)来实现。 1. 函数指针: 使用函数指针,我们首先需要定义一个与要传递的函数具有相同签名(参数和返回值类型)的函数指针类型。然后,我们可以将函数的名称赋给指针,并将该指针作为参数传递给另一个函数。 例如,假设我们有一个函数 `void foo(int)`,我们希望将其作为参数传递给另一个函数 `void bar(void (*func)(int))`,则可以这样做: ```cpp void foo(int x) { // 函数体 } void bar(void (*func)(int)) { // 调用函数指针所指向的函数 func(42); } int main() { // 将函数指针作为参数传递给另一个函数 bar(foo); return 0; } ``` 2. 函数对象(函数器): C++中的函数对象是可调用对象,可以像函数一样被调用。我们可以定义一个类,并在该类中实现 `operator()` 运算符重载。然后,我们可以创建该类的对象,并将该对象作为参数传递给另一个函数。 例如,假设我们有一个函数对象类 `Foo`,我们希望将其作为参数传递给另一个函数 `void bar(Foo)`,则可以这样做: ```cpp class Foo { public: void operator()(int x) { // 函数体 } }; void bar(Foo func) { // 调用函数对象 func(42); } int main() { // 将函数对象作为参数传递给另一个函数 Foo foo; bar(foo); return 0; } ``` 无论是使用函数指针还是函数对象,我们都可以将函数作为参数传递给其他函数,并在接受参数的函数中调用该函数。这样可以实现更灵活的代码设计和功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘气の小狼人¹º²⁴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值