C++ 函数参数 值传递与引用传递
以前我们在C语言中函数参数传递过程中,如果我们想要让当A函数作用域中的变量经过B函数处理之后的数值仍然在A函数中生效,这个时候函数参数的传递时需要引用方式去传递,方式如下:
#include <stdio.h>
//函数参数为指针,通过修改指针里面的内容达到对main中b变量的修改
void func(int *a)
{printf("value is %d \n",*a);*a = 20;
}
int main()
{int b=10;//参数传递的时候传入b变量的地址即可func(&b);printf("from main and b is %d\n",b);return 0;
}
编译运行,结果如下
value is 10
from main and b is 20
C++通同样需要如此,只是语法有部分差异,同时当类的实例作为函数时又会有额外的拷贝构造过程消耗内存,此时需要进行引用传递来减少拷贝构造,通过std::ref
进行引用传递。如果进行值传递,之间将定义类类型的变量传入即可。
如下代码:
#include <iostream>
#include <thread>
class Factor{public:void operator()(std::string &a){std::cout << " value is " << a << std::endl;a = " i am changed";}
};int main()
{std::string a = "I am a value ";//C++中兼容C的语法,同时有自己封装的模板库。std::ref用于函数参数传入类类型的引用std::thread t1(Factor(),std::ref(a));t1.join();std::cout << " from main value is " << a << std::endl; return 0;
}
编译g++ -std=c++11 ref.cc -o ref -lpthread
结果如下
value is I am a value
from main value is i am changed
C++ 函数参数 值传递与引用传递相关推荐
- c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)
值传递 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 在函数结束返回后,形参被丢弃释放,实参的内容不会被改变 数据值传递和地址值传递 数 ...
- c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递
c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...
- 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化
[重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...
- 值传递和引用传递详解
值传递 敢问何为值传递? 我们通过查询百度百科知道: 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数 通俗来讲,值传递就是将当前参数的值复制 ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- python函数参数的引用传递_Python初学者笔记(八):函数参数的值传递和引用传递...
函数参数的值传递和引用传递 像我们最熟悉的 C 语言,再写函数参数的同时需要规定函数参数到底是值传递还是引用传递.引用传递导致该参数在函数内的修改出了函数之外也会生效,值传递所有的修改都不会体现到函数 ...
- c语言 函数参数传递 值传递,c语言中函数参数的三种传递方式——值传递、指针传递、引用传递...
函数参数有三种传递方式值传递.指针传递.引用传递. 1.值传递 将已经初始化的变量值(或常量)传递到函数中. 例如: int func(int value) { int ret = value++; ...
- 形参与实参, 值传递与引用传递, ref参数与out参数的区别和联系?
一. 形参与实参 1.先来一例子: fun(int a) {........} Main () { int b=0; fun(b); } 其中,a是形参,b是实参. 2.再看理论定义 形参出现 ...
- python是值传递还是引用传递_Python里参数是值传递还是引用传递?
Python就是把一些参数从一个函数传递到另一个函数,从而使其执行相应的任务.但是你有没有想过,参数传递的底层是如何工作的,原理又是怎样的呢? 实际工作中,很多人会遇到这样的场景:写完了代码,一测试, ...
- Javascript 之《函数传参到底是值传递还是引用传递》
前言 这个问题其实困惑了我好久,但是在实际使用中总是得过且过,不想去深究.由于这种态度,在学习 Javascript 过程中,水平一直都是出于半桶水状态,很多概念和原理似懂非懂,模糊不清. 所以,写了 ...
最新文章
- 修改 ShiroUser 缓存用户
- Android系统中的进程管理:进程的创建
- screen常用命令以及screen恢复会话时出现There is no screen to be resumed matching
- AngularJs ng-repeat限制循环次数
- java获取method,2.5 反射——Class对象功能_获取Method
- 今日恐慌与贪婪指数为70 贪婪程度有所缓解
- java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...
- 苏宁:我们开发百度小程序遇到的那些“坑”
- 老板要我开发一个简单的工作流引擎 !
- 【狂神说Redis】3五大数据类型
- mongodb python 存文件_Python小课堂MongoDB(1)
- 如何破解HIT的孤岛效应,一起关于患者主索引的案例分享
- 计量经济学搭建模型总结
- 深度学习之蛋白质二级结构预测
- 什么时候可以用到强化学习?强化学习怎么用?
- AI实战:目标检测模型应用之生活垃圾图片分类
- 仿京东左侧菜单弹出html代码,一个类似京东网页左侧菜单扩展的特效代码
- PMP第三章:项目经理的角色
- 详细说明VScode设置中文,主题更改,文件图标及字体设置
- 洛谷P2455 [SDOI2006]线性方程组
热门文章
- 丽水风光(二)—劫色“古堰画乡”
- 《OpenCV3编程入门》学习笔记6 图像处理(三)形态学滤波(1):腐蚀与膨胀
- OpenCV+python:顶帽、黑帽、形态学梯度
- linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统
- python做excel表格代码_python实现跨excel的工作表sheet之间的复制方法
- Linux数组计算平均值,从数组中读取并计算平均值
- mysql query browswer_MySQL数据库新特性之存储过程入门教程
- stk 坐标系_STK学习-坐标系
- 大数据概念思维导图_思维导图|数据化风控(信用评分建模教程)
- mysql触发器菜鸟_mysql触发器学习