函数--值传递

函数值传递特点:

  • 形参是实参的副本,修改形参不影响实参
  • 函数栈帧中形参的独立内存空间
  • 适用场景:无需修改原始数据的计算逻辑

实际代码测试:

cpp 复制代码
#include<iostream>
using namespace std;

//定义一个 实现两个数字进行交换的函数

void swap(int num1,int num2)
{
	//输出交换前的num1,num2的值
	cout<<"交换前:"<<endl;
	cout<<"num1="<<num1<<endl;
	cout<<"num2="<<num2<<endl;
	
	//对num1,num2进行交换
	int temp=num1;
	num1=num2;
	num2=temp;
	
	//输出交换后的num1,num2的值
	cout<<"交换后:"<<endl;
	cout<<"num1="<<num1<<endl;
	cout<<"num2="<<num2<<endl;
	//不需要返回值的时候(void),可以不写return 
}


int main()
{
	int a=10;
	int b=20;
	
	cout<<"交换前:"<<endl;
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;
	
	
	swap(a,b);
	
	
	cout<<"交换后:"<<endl;
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;

system("pause");
	return 0;
}

通过运行上述代码,我们可以发现实参a,b的数值在交换前后并未发生改变 ,而形参num1,num2发生了交换。下面我们将展示其背后的原理。

原理讲解

值传递的局限性

  • 大结构体传递时的性能问题
  • 无法通过值传递实现"输出型参数"
  • 解决方案:改用指针或引用(C++)
相关推荐
free-elcmacom14 小时前
C++ 默认参数详解:用法、规则与避坑指南
开发语言·c++
码云数智-大飞14 小时前
分布式事务解决方案全景指南:2PC、TCC、SAGA 与 Seata 实战
开发语言
Shining059614 小时前
AI编译器系列(二)《AI 编译器中的前端优化》
人工智能·学习·其他·学习方法·infinitensor
娇娇yyyyyy14 小时前
QT编程(10): QLineEdit
开发语言·qt
Albert Edison14 小时前
【ProtoBuf 语法详解】Any 类型
服务器·开发语言·c++·protobuf
喵叔哟14 小时前
5. 【Blazor全栈开发实战指南】--Blazor组件基础
开发语言·javascript·ecmascript
无忧.芙桃14 小时前
C++11的部分内容(上)
c++
罗超驿14 小时前
Java数据结构_链表
java·数据结构·链表
海奥华214 小时前
Rust初步学习
开发语言·学习·rust
小璐资源网14 小时前
C++中如何正确区分`=`和`==`的使用场景?
java·c++·算法