C++引用作为函数的参数
引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式:
void swap(int &p1, int &p2) //此处函数的形参都是引用
{
int p;
p=p1;
p1=p2;
p2=p;
}
为了在程序中调用该函数,在相应的主调函数的调用点处直接以变量作为实参进行调用即可,而不需要对实参变量有任何的特殊要求。如上面定义的swap函数的主调函数可写为:
int main()
{
int a,b;
cin >> a >> b; //输入a,b两变量的值
swap(a,b); //直接以变量a和b作为实参调用swap函数即可
cout << a << ' ' << b;
return ;
}
当发生函数调用时,主调函数的调用点处的实参变量a和b分别传递给被调用函数的形参p1和p2,由于形参p1和p2定义成引用的形式,所以这时p1就是实参a的引用,p2就是实参b的引用。所以,在被调函数swap中,任何对形参p1和p2的操作实质就是对实参a和b的操作。
由此,有几点需要注意:
- 传递引用给函数与传递指针的效果是一样的,这时被调函数的形参就作为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作;
- 使用引用传递函数的参数在内存中并没有产生实参的副本(因为引用只是目标变量的别名而不是一个新的变量),且它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时需要给形参分配存储单元,这样形参与实参就占用不同的存储单元,所以形参变量的值时实参变量的副本。因此,当参数传递的数据量较大时,用引用比较好。
- 使用指针作为函数的参数虽然也能达到与使用引用一样的效果,但是,在被调函数中需要重复使用“*指针变量名"的形式进行运算,容易产生错误且程序的阅读性较差。
本人自学,教材可能有点老,有问题的话求大家指正!!!谢谢!!!
C++引用作为函数的参数的更多相关文章
- const引用和函数占位参数遇上默认参数以及内联函数
1.const引用: 但是加上const之后是可以的,const int &a=100;就不会报错了. 2.函数占位参数: 如果给最后的占位参数加上默认值: 3.内联函数 内联只是对编译器发起 ...
- Python——变量的引用和函数的参数和返回值的传递方式
变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...
- c++将引用作为函数的参数---6
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量别名.这种传递参数 的方法称为按引用传递. ...
- C++中,引用作为函数参数
引用作为函数参数 C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能. ———————————————————— c++,函数传参:(1)将变量名作为实参和形参.这时传给形参 ...
- C++中使用引用作为函数参数的优点
1.传递引用给函数与传递指针的效果是一样的.这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标 对象(在主调函数中)的操作. ...
- php引用(&)变量引用,函数引用,对象引用和参数引用用法
php引用(&)变量引用,函数引用,对象引用和参数引用用法 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语 ...
- php自定义函数之参数的引用
在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识:大理石平台支架 <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'. ...
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- C++基础--引用做函数参数
引用,简单粗暴的解释叫做别名,简单粗暴的例子就是,我是熊叫大雄,但是很多时候别人不叫我熊叫大雄,会叫我大雄,粤语地区朋友爱叫我阿雄,有人叫我雄,所以,熊叫大雄这个变量的值是我,雄.大雄.阿雄是熊叫大雄 ...
随机推荐
- Qt之QtScript(一)
C++和JavaScript相互通信.今天就学习QtScript模块吧. Qt 包含完全集成的 ECMA 标准脚本引擎.Qt Script 集成了 QObject,为脚本提供了 Qt 的信号与槽 (S ...
- javascript笔记08:javascript的if...else语句
案例代码如下: <!DOCTYPE html> <html> <body> <p>点击这个按钮,获得基于时间的问候.</p> <but ...
- 无法从“object”转换为“string”
就我在项目中遇到的问题,和大家分享一下“无法从“object”转换为“string” 在把我出错的代码复制上来, Guid userid = new Guid(Membership.GetUser( ...
- iOS开发篇-申请开发者账号流程
1.注册一个苹果的apple id申请apple id的地址: https://appleid.apple.com/account 2.如申请公司账号,请使用以下链接免费获取邓白氏号码,以下的申请表格 ...
- the forth assignment of software testing
软件测试用到的 pict33.msi. 加载安装即可. 顺步安装 使用背景: 假如现在有一个网站后台需要测试工程师进行测试用例设计.用常规的方法将参数列出: 帐户名: 空,不存在,超长,超短,正常 密 ...
- jQuery中的html,val,text区别
在项目开发中,写jQuery代码有时候会搞混淆一下东西,现在写一下demo来列出jQuery的.html(),.text(),.val()的区别. 1. html()取得第一个匹配元素的内容,简单来说 ...
- ASP.NET MVC 使用Echarts
Echarts官网 页面配置: <!DOCTYPE html> <html> <head> <meta name="viewport" c ...
- C#高级
程序集 程序集概念: 程序集是.net中的概念. .net中的dll与exe文件都是程序集.(exe与dll的区别(exe有程序主入口,可以执行,dll没有主入口,不可运行)) 程序集(Assembl ...
- 关于MD5校验和java工程下的校验
File file = new File("cos_code2003.bin"); System.out.println(file.length()); byte[] data = ...
- jsp文件怎么打开呢
jsp是一种嵌入式网页脚本,正常情况下可以用记事本等文本工具直接打开,也可用DREAMWEAVER等网页设计工具友好编辑.不过这样只能看到程序的源代码.当然,我们也可以用IE等浏览器直接打开浏览,前提 ...