zoukankan      html  css  js  c++  java
  • c&c++函数的参数和返回值的传递终结版

       c++函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

       在这之前先看几个例子:    

    一, int a=10;
        int b=a;
        b+=10;
        此时b是a的一个拷贝,改变b的值,a并不会受到影响,所以此时
        a=10;
        b=20;
    二, int a=10;
    int &b=a;
    b+=10;
    此时b是a的引用,对于b的任何操作都相当于对a进项操作,对于b的任何操作也都相当于对a的操作,a就是b,b就是a,所以此时a,b的值都为20。
    三, int a=10;
    int *b=&a;
    *b+=10;
    此时指针b指向a,修改*b就是修改a的值,所以此时a, *b的值都为20;
    理解这些接下来就是小事了。

    以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n, 所以n的值仍然是0。

    void Func1(int x)

    {

    x = x + 10;

    }

    int n = 0;

    Func1(n);

    cout << “n = ” << n << endl; // n = 0

    以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指针,改变该指针的内容将导致n的值改变,所以n的值成为10。

    void Func2(int *x)

    {

    (* x) = (* x) + 10;

    }

    int n = 0;

    Func2(&n);

    cout << “n = ” << n << endl; // n = 10

     

    以下是“引用传递”的示例程序。由于Func3函数体内的x是外部变量n的引用,x和n是同一个东西,改变x等于改变n,所以n的值成为10。

    
    

    void Func3(int &x)

    
    

    {

    
    

    x = x + 10;

    
    

    }

    
    

    
    

    int n = 0;

    
    

    Func3(n);

    
    

    cout << “n = ” << n << endl; // n = 10

    如果这个时候还有点不懂,没关系

    对于void Func1(int x)  使用Func1(n); 其实就相当于x=n;只是把n的值拷贝给了x,看文章开头,改变拷贝是改变不了n的值得;所以n的值没有变化。

    接下来类似 对于void Func2(int *x)使用Func2(&n);就相当于  *x=&n,继续看文章头部的例子,这时候改变*x的值就相当于改变n的值,所以n的值会发生变化。

    对于  void Func3(int &x) 使用 Func3(n); 相当于&x=n; 同上,此时改变x的值,n的值会变化。

     
  • 相关阅读:
    angularjs中设置select的选中项
    axios 下载文件
    解决Springboot集成ActivitiModel提示输入用户名密码的问题
    VMWare14 安装Mac OS系统(图解)
    hexo 搜索功能
    Nginx禁止IP直接访问网站
    不确定理论与多传感器数据融合
    Bayes理论与多传感器数据融合
    从“中英文思维回译法”看中英思维差异
    不确定理论与多传感器数据融合
  • 原文地址:https://www.cnblogs.com/yalong/p/5674332.html
Copyright © 2011-2022 走看看