C++引用作为函数的参数

  引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式:  

1 void swap(int &p1, int &p2)    //此处函数的形参都是引用
2 {
3     int p;
4     p=p1;
5     p1=p2;
6     p2=p;
7 }

  为了在程序中调用该函数,在相应的主调函数的调用点处直接以变量作为实参进行调用即可,而不需要对实参变量有任何的特殊要求。如上面定义的swap函数的主调函数可写为:

int main()
{
    int a,b;
    cin >> a >> b;    //输入a,b两变量的值
    swap(a,b);         //直接以变量a和b作为实参调用swap函数即可
    cout << a << ‘ ‘ << b;
    return 0;
}

  当发生函数调用时,主调函数的调用点处的实参变量a和b分别传递给被调用函数的形参p1和p2,由于形参p1和p2定义成引用的形式,所以这时p1就是实参a的引用,p2就是实参b的引用。所以,在被调函数swap中,任何对形参p1和p2的操作实质就是对实参a和b的操作。

 

  由此,有几点需要注意:

  • 传递引用给函数与传递指针的效果是一样的,这时被调函数的形参就作为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作;
  • 使用引用传递函数的参数在内存中并没有产生实参的副本(因为引用只是目标变量的别名而不是一个新的变量),且它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时需要给形参分配存储单元,这样形参与实参就占用不同的存储单元,所以形参变量的值时实参变量的副本。因此,当参数传递的数据量较大时,用引用比较好。
  • 使用指针作为函数的参数虽然也能达到与使用引用一样的效果,但是,在被调函数中需要重复使用“*指针变量名"的形式进行运算,容易产生错误且程序的阅读性较差。    

本人自学,教材可能有点老,有问题的话求大家指正!!!谢谢!!!

时间: 2024-10-07 18:17:09

C++引用作为函数的参数的相关文章

基本概念之将引用作为函数的参数有哪些特点?

问题:将"引用"作为函数的参数有哪些特点? 分析: 这道题不仅考差了对引用的理解和应用,同时考差了对函数的三种传递参数方式基本概念的理解.总结起来,有如下特点: ? 传递引用给函数与指针的效果是一样的.这时,被掉函数的形参就被当成原来主调函数中实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应目标对象的操作. ? 使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作,而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形

JavaSE8基础 抽象类的引用作为函数的参数 指向的一定是子类的对象

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: abstract class Person { public abstract void sayHello(); } class Javaer extends Person{ public void sayHello() { System.out.println("Java Hello"); } }

Python——变量的引用和函数的参数和返回值的传递方式

变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: 1 a = 10 2 print(id(a)) 3 a = 11 4 print(id(a)) (利用id( )方法查看数据的地址) 输出结果为: 可以发现:修改变量的值,变量保存的地址随之改变. python中: 变量和数据是分开存储的 变量 中保存着数据在内存中的地址 我们把变量中记录数据的地址的行为,叫做 引用. 通俗的来说,在 Python 中,变量的名字类似于

c++将引用作为函数的参数---6

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量别名.这种传递参数 的方法称为按引用传递.按引用传递允许被调用的函数能够访问调用函数中的变量.C++新增这项特性是对C语言的超越,C语言只能按值传递.按值传递导致被 调用函数使用调用程序的值得拷贝.当然,C语言也允许避开按值传递的限制,采用按指针传递的方式. 代码: #include <stdio.h> #include <iost

js中函数传递参数,究竟是值传递还是引用传递?

记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); // "Nicholas" 肯定

将“引用”作为函数参数有哪些特点

(1)传递引用给函数与传递指针的效果是一样的.这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作. (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作:而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本:如果传递的是对象,还将调用拷贝构造函数.因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好. (

C++中使用引用作为函数参数的优点

1.传递引用给函数与传递指针的效果是一样的.这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标 对象(在主调函数中)的操作. 2.使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作:而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的 副本:如果传递的是对象,还将调用拷贝构造函数.因此,当参数传递的数据较大时,用引用比 用一般变量传递参数的效率和所占空间都好.

为什么赋值操作符函数的参数为const引用,返回值为引用

为什么赋值操作符函数的参数为const引用,返回值为引用 1.返回值类型 返回类型一般声明为类型的引用,并在函数结尾时返回实例自身的引用(即*this).这里主要有两个原因:(1)返回引用可以减少一次拷贝构造和析构函数导致不必要的开销,因为返回值类型不是引用,会创建一个匿名对象,这个匿名对象时个右值,获取return的值.(2)可以实现连续赋值 在例子中 b=c=a; 返回值不是引用类型也是可以的,其运算顺序 b=(c=a); c得到一个右值,再将右值赋给b,所以逻辑上没有问题的.但是如果是 (

关于变量的理解和函数内参数的引用

首先理解变量包括两种不同数据类型的值:1.基本类型值 2.引用类型值 基本类型值为简单的数据段,如var name="tom": name.age=20: alert(name.age): //undefined  不能给基本类型的值无法添加属性. 引用类型值为可能由多个值构建的对象,如var person=new Object(): person.age=20: alert(person.age): //20  可以给基本类型的值添加属性. 函数内参数的传递:1.基本类型的值传递:f