zoukankan      html  css  js  c++  java
  • 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的操作。

     

      由此,有几点需要注意:

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

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

  • 相关阅读:
    springboot ueditor 使用心得
    利用github和git命令,将本地项目共享到服务器上——第二章
    利用github和git命令,将本地项目共享到服务器上
    如何打造亚秒级加载的网页3——用户体验 总结
    如何打造亚秒级加载的网页2——网络性能 过程解读
    如何打造亚秒级加载的网页1——前端性能
    什么是跨域?怎么解决跨域?
    Vue生命周期
    利用JS实现vue中的双向绑定
    按照vue文档使用JavaScript钩子但是却不能执行动画?
  • 原文地址:https://www.cnblogs.com/MichaelBin/p/4544064.html
Copyright © 2011-2022 走看看