C++参数传递
2022/7/8 14:23:07
本文主要是介绍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);
指针传递特点分析:
- 指针传递将主调函数中实参的内存地址传给被调函数的指针形参,被调函数通过该内存地址间接访问主调函数中的变量。
- 指针传递是一种双向数据传递机制。主调函数可以通过内存地址将数据传递给被调函数,被调函数可以通过内存地址修改主调的实参。
- 指针传递的好处在于可以通过内存地址实现双向传递,二是在传递批量数据(如数组)时只需要传递一个内存首地址,这样可以提高数据传递效率,降低内存占用。
下面为三种参数传递的实列
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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, 5View Code
#include <iostream>
void swap1(int a, int b)
{
int t;
t = a; a = b; b = t;
}
void swap2(int &a, int &b)
{
int t;
t = a; a = b; b = t;
}
void swap3(int *a, int *b)
{
int t;
t = *a; *a = *b; *b = t;
}
int main()
{
std::cout << "Exchange x and y." << std::endl;
int x1 = 5, y1 = 10;
int x2 = 5, y2 = 10;
int x3 = 5, y3 = 10;
swap1(x1,y1);
swap2(x2, y2);
swap3(&x3, &y3);
std::cout << x1 << "," <<y1 << std::endl;
std::cout << x2 << "," << y2 << std::endl;
std::cout << x3 << "," << y3 << std::endl;
return 0;
}
Exchange xand y.
5, 10
10, 5
10, 5
这篇关于C++参数传递的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-17zero-shot-learning-definition-examples-comparison
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享
- 2024-06-06基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor-icode9专业技术文章分享
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望