函数--值传递

函数值传递特点:

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

实际代码测试:

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++)
相关推荐
Dlrb12112 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
kkeeper~2 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
Tisfy2 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
一直不明飞行2 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
IronMurphy2 小时前
【算法四十七】152. 乘积最大子数组
算法
REDcker2 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
盲敲代码的阿豪3 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
basketball6163 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
互联科技报3 小时前
2026超融合选型:Top5品牌与市场格局解读
开发语言·perl
weixin199701080163 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python