当前位置: 首页 > news >正文

传值、传址、传引用

在参数传递时,被传递到函数的可以变量的值、地址、引用

一、传值

参数以 值 的方式传递。

#include<iostream>

using namespace std;

void changeAge(int age,int newAge);

int main()
{
	int age=24;
	cout<<"My age is "<<age<<"\n";  //24
	
	changeAge(age,age+1); //以地址的方式传递参数 
	
	cout<<"Now my age is "<<age<<"\n"; //24
	
	return 0;
}

void changeAge(int age,int newAge)
{
	age=newAge;
	
	cout<<"In this,my age is "<<age<<"\n"; //25
}



二、传址

参数以地址的方式传递,函数参数这里可以用指针(指针里存放的是地址)。

想要获取某个变量的地址,只能需要再变量面前加一个“取地址(&)”操作符就行了。

注意:如果传过去的是 地址,在函数中必须要通过“ *” 对指针进行解引用,除非你有其他用途。 

案例1:

#include<iostream>

using namespace std;

void changeAge(int *age,int newAge);

int main()
{
	int age=24;
	cout<<"My age is "<<age<<"\n";  //24
	
	changeAge(&age,age+1); //以地址的方式传递参数 
	
	cout<<"Now my age is "<<age<<"\n"; //25
	
	return 0;
}

void changeAge(int *age,int newAge)
{
	*age=newAge;
	
	cout<<"In this,my age is "<<*age<<"\n"; //25
}

 


案例2:实现数值的调换

#include <iostream>

using namespace std;

void swap(int *x ,int *y);

int main()
{
	int x,y;
	cout<<"请输入另个不同的值:";
	cin>>x>>y;
	
	swap(&x,&y);//参数以地址的方式传递 
//	cout<<"调换后输出:"<< x <<''<< y <<''<< "\n\n"; //报错 
	cout<<"调换后输出:"<< x <<' '<< y <<' '<< "\n\n"; //'' 中间记得加空格 
	
	return 0;
}

void swap(int *x ,int *y)
{
	int temp;
	temp=*x;
	*x=*y;
	*y=temp;
}



三、传引用

参数以引用传递方式传递:使用某种约定使得在调用该函数时不需要使用指针的语法。

他跟我们传址的目的是一样的,都是把地址传递给函数,但语法不同更加容易使用了。

#include <iostream>

using namespace std;

void swap(int &x ,int &y);

int main()
{
	int x,y;
	cout<<"请输入另个不同的值:";
	cin>>x>>y;
	
	swap(x,y);//这里编译器会自动把传过来的整型变量翻译成地址,而不是以变量的形式传递过去 
//	cout<<"调换后输出:"<< x <<''<< y <<''<< "\n\n"; //报错 
	cout<<"调换后输出:"<< x <<' '<< y <<' '<< "\n\n"; //'' 中间记得加空格 
	
	return 0;
}

void swap(int &x ,int &y)
{
	int temp;
	temp=x;
	x=y;
	y=temp;
}

 



四、反汇编对比三种传递方式分析讲解运行原理 


未完待续。。。

相关文章:

  • 0基础 | 硬件 | 电源系统 一
  • LeetCode 1863.找出所有子集的异或总和再求和
  • [Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集
  • 最新版本尚硅谷硅谷甄选1-40集问题解析汇总
  • docker初始环境搭建(docker、Docker Compose、portainer)
  • Java的Selenium元素定位-cssSelector
  • 在蓝牙信号扫描中,dBm 的负值是正常现象,表示信号强度
  • Python地理数据处理 28:基于Arcpy批量操作实现——按属性提取和分区统计
  • JAVA SE:认识类和对象
  • 7. 记忆(Memory)机制:让AI拥有“短期记忆”与“长期记忆”
  • 核心知识—— RDD常用算子之数据转换
  • Hugging Face模型微调训练(基于BERT的中文评价情感分析)
  • 【BFS最小步数】魔板题解
  • 从零构建大语言模型全栈开发指南:附录与资源-3.面试与进阶-200道大模型面试真题与职业发展路线图-基础理论篇50题
  • C++_类和对象(中)
  • 【Python Cookbook】字符串和文本(五):递归下降分析器
  • 颜色性格测试:探索你的内在性格色彩
  • 现代复古电影海报品牌徽标设计衬线英文字体安装包 Thick – Retro Vintage Cinematic Font
  • [项目总结] 在线OJ刷题系统项目总结与分析(二): 技术应用(上)
  • R语言网状Meta分析---Meta回归(1)(基于gemtc)