21 C++函数参数传递

C++完整教程

在上一篇中,我们探讨了函数的定义与声明。了解了如何定义一个函数以及如何声明一个函数是非常重要的,而在本篇中,我们将深入讨论函数的参数传递方式。参数传递是函数外部与内部进行数据交换的桥梁,合理的参数传递可以大大提高程序的可读性与可维护性。

参数传递的基本方式

C++中的函数参数传递主要有以下几种方式:

  1. 值传递
  2. 引用传递
  3. 指针传递

1. 值传递

在值传递中,函数参数的值会被复制到函数内部,因此在函数内部对参数的修改不会影响外部变量。使用这种方式时,函数的参数是以一个副本的形式存在的。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>

void modifyValue(int val) {
val = 20; // 修改的是副本
std::cout << "Inside function: " << val << std::endl;
}

int main() {
int number = 10;
std::cout << "Before function: " << number << std::endl;
modifyValue(number);
std::cout << "After function: " << number << std::endl; // number 仍然是 10
return 0;
}

输出:

1
2
3
Before function: 10
Inside function: 20
After function: 10

在这个例子中,number的值在进入modifyValue函数时被复制,因此函数内部对val的修改不会影响到number

2. 引用传递

在引用传递中,实际参数的地址被传递给函数,函数内部对参数的任何修改都会反映到实际参数上。这种方式能够提高效率,因为避免了数据的复制。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>

void modifyReference(int& ref) {
ref = 30; // 修改的是原始数据
std::cout << "Inside function: " << ref << std::endl;
}

int main() {
int number = 10;
std::cout << "Before function: " << number << std::endl;
modifyReference(number);
std::cout << "After function: " << number << std::endl; // number 变为 30
return 0;
}

输出:

1
2
3
Before function: 10
Inside function: 30
After function: 30

在这里,我们使用了int& ref来进行引用传递,这使得modifyReference函数直接操作number的引用,从而修改了其值。

3. 指针传递

指针传递与引用传递类似,同样可以直接修改实际参数。不同的是,使用指针时需要对指针进行解引用才能访问或修改值。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>

void modifyPointer(int* ptr) {
*ptr = 40; // 修改指针指向的值
std::cout << "Inside function: " << *ptr << std::endl;
}

int main() {
int number = 10;
std::cout << "Before function: " << number << std::endl;
modifyPointer(&number); // 传递number的地址
std::cout << "After function: " << number << std::endl; // number 变为 40
return 0;
}

输出:

1
2
3
Before function: 10
Inside function: 40
After function: 40

在这个例子中,使用int* ptr作为参数接收一个指向number的指针,并通过*ptr直接修改指针指向的值。

小结

在本篇中,我们探讨了C++中函数的参数传递方式,包括值传递引用传递指针传递。选择合适的参数传递方式可以提升程序的性能及可读性,尤其是在处理大型数据时,使用引用或指针能够避免不必要的数据复制。

在下一篇中,我们将深入讨论函数的返回值与重载,欢迎继续关注!

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论