C++参数传递
一、函数间参数传递的三种方式
1、值传递
主调函数:swap(x,y);
被调函数:void swap(int a,int b);
值传递特点分析:
- 值传递只是将主调函数中实参的值传递给被调函数的形参,通常用于将主调函数中原始数据传递给被调函数。被调函数修改形参中的数据,修改的只是数据副本,不会影响主调函数中实参的数据。
- 值传递是一种单向数据传递机制,实参可以是常量、变量或表达式。
- 值传递的好处在于被调函数程序员错误修改了形参不会影响主调函数中的实参。函数间互不干扰。
2、引用传递
主调函数:swap(x,y);
被调函数:void swap(int &a,int &b);
引用传递特点分析:
- 引用传递将被调函数的形参定义成主调函数中实参变量的引用,被调函数通过该引用间接访问主调函数中的变量。
- 引用传递是一种双向数据传递机制。被调函数修改形参实际上修改的是对应的实参。主调函数通过引用将数据传给被调函数,被调函数也通过引用修改主调函数实参的值。
- 引用传递的好处在于形参直接引用实参,不必另外分配内存可以降低占用;二是可以借此实现函数间的双向数据传递。
3、指针传递
主调函数:swap(&x,&y);
被调函数:void swap(int *a,int *b);
指针传递特点分析:
- 指针传递将主调函数中实参的内存地址传给被调函数的指针形参,被调函数通过该内存地址间接访问主调函数中的变量。
- 指针传递是一种双向数据传递机制。主调函数可以通过内存地址将数据传递给被调函数,被调函数可以通过内存地址修改主调的实参。
- 指针传递的好处在于可以通过内存地址实现双向传递,二是在传递批量数据(如数组)时只需要传递一个内存首地址,这样可以提高数据传递效率,降低内存占用。
下面为三种参数传递的实列

1 #include <iostream> 2 3 void swap1(int a, int b) 4 { 5 int t; 6 t = a; a = b; b = t; 7 } 8 void swap2(int &a, int &b) 9 { 10 int t; 11 t = a; a = b; b = t; 12 } 13 void swap3(int *a, int *b) 14 { 15 int t; 16 t = *a; *a = *b; *b = t; 17 } 18 19 int main() 20 { 21 std::cout << "Exchange x and y." << std::endl; 22 int x1 = 5, y1 = 10; 23 int x2 = 5, y2 = 10; 24 int x3 = 5, y3 = 10; 25 swap1(x1,y1); 26 swap2(x2, y2); 27 swap3(&x3, &y3); 28 std::cout << x1 << "," <<y1 << std::endl; 29 std::cout << x2 << "," << y2 << std::endl; 30 std::cout << x3 << "," << y3 << std::endl; 31 return 0; 32 } 33 //输出结果 34 Exchange xand y. 35 5, 10 36 10, 5 37 10, 5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!