值传递 指针传递 引用传递
参数传递共有三种方式,即值传递、指针传递、引用传递。
值传递
值传递就是在调用函数的时候将实参的值拷贝后赋值给形参,形参改变不会改变实参,各自有各自的空间。且形参为局部变量,函数运行完后会被操作系统释放掉。
#include <iostream>
using std::cout;
using std::endl;
void fun1(int a){
a = 10;
cout << "形参的值:" << a << endl;
cout << "形参的地址:" << &a << endl;
}
int main(){
int a1 = 20;
fun(a1);
cout << "实参的值:" << a1 << endl;
cour << "实参的地址:" << &a1 << endl;
return 0;
}
这个过程及参数变化可以看下面这张图(每个色块表示一块内存区域,同色表示同一块内存,下面一行小字是这块内存的地址):
指针传递
指针传递也可以理解为一种特殊的值传递,只不过这个值是一个指针变量。所以也会在内存中为形参开辟一块新的区域,用于实参指针对他初始化,此时,实参和形参指针就会指向同一块内存,对形参指针指向的值进行操作就是对实参指针指向的值进行操作。
#include <iostream>
using std::cout;
using std::endl;
void fun1(int* pa) {
*pa = 10;
cout << "形参指针指向的值:" << *pa << endl;
cout << "形参指针指向的地址:" << pa << endl;
cout << "形参指针的地址:" << &pa << endl;
}
int main() {
int a1 = 20;
fun1(&a1);
cout << "实参的值:" << a1 << endl;
cout << "实参的地址:" << &a1 << endl;
return 0;
}
内存中的变化如图所示:
引用传递
对于引用传递,形参只是实参的别名,并没有为形参重新开辟一块内存,对形参进行操作就是直接在实参上操作,能够改变实参的值。
#include <iostream>
using std::cout;
using std::endl;
void fun2(int& a) {
a = 10;
cout << "形参的值:" << a << endl;
cout << "形参的地址:" << &a << endl;
}
int main() {
int a1 = 20;
cout << "a1 = " << a1 << endl;
fun2(a1);
cout << "实参的值:" << a1 << endl;
cout << "实参的地址:" << &a1 << endl;
return 0;
}
内存中的变化如下:
形参改变实参也发生了改变,形参实参地址是一样的,对应的是同一块内存区域,因此引用传递相比指针传递可以节省内存空间。
总结:参数传递和函数返回值传递尽量使用引用传递。返回值如果是局部变量的除外
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!