• C++ 引用


    Reference(引用)

    1. 引用的定义

    引用就是另一个变量的别名

    2. 声明引用变量的方法

    int x;
    int&  rx = x;
    int x, &rx = x;

    3. 引用的性质(非常重要)

    • 通过引用所做的读写操作实际上是作用于原变量

    •  引用必须在声明的时候初始化。

    • 引用一旦初始化,引用名字就不能再指定给其它变量

    4. 引用类型做函数的参数:引用传递

    • (引用可做函数参数,但调用时只需传普通变量即可)

    • (在被调函数中改变引用变量的值,则改变的是实参的值)

    5. 例子

    5.1.       例1:通过值传参

    //pass by value
    void swap(int x,  int y){
      int  t;
      t=x;  x=y;  y=t;
    }
    int main() {
      int a=5, b{10};
      cout << "Before: a=" << a << " b=" << b << endl;
      swap( a,  b );
      cout << "After:  a=" << a << "b=" << b << endl;
      return 0;
    }
    View Code

    输出结果:

    Before: a=5 b=10

    After:  a=5 b=10

      

    5.2.       例2:通过指针传参 

    //pass by pointer
    void swap(int* x,  int* y){
      int  t;
      t=*x;  *x=*y;  *y=t;
    }
    int main() {
      auto a{5}, b{10};
      cout<< "Before: a=" << a << " b=" << b << endl;
      swap( &a,  &b );
      cout<< "After: a=" << a << "b=" << b << endl;
      return 0;
    }
    View Code

    输出结果:

    Before: a=5 b=10

    After:  a=10 b=5

    5.3.       例3:通过引用传参

    //pass by reference
    void swap(int& x,  int& y){
      int  t;
      t=x;  x=y;  y=t;
    }
    int main() {
      auto a{5}, b{10};
      cout<< "Before: a=" << a << " b=" << b << endl;
      swap( a,  b );
      cout << "After: a=" << a << "b=" << b << endl;
      return 0;
    }
     
    
     
    
     
    View Code

    输出结果:

    Before: a=5 b=10

    After:  a=10 b=5

    # include <iostream>
    using std::cout;
    using std::cin;
    using std::endl;
    void swap1(int, int);
    void swap2(int*, int*);
    void swap3(int&, int&);
    int main(){
        int x1{ 10 }, y1{ 5 };
        cout << "通过值传递" << endl;
        cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
        swap1(x1, y1);
        cout << "After a:" << x1 << "	After b:" << y1 << endl;
    
        cout << "通过指针传递" << endl;
        cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
        swap2(&x1, &y1);
        cout << "After a:" << x1 << "	After b:" << y1 << endl;
    
        cout << "通过引用传递" << endl;
        cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
        swap3(x1, y1);
        cout << "After a:" << x1 << "	After b:" << y1 << endl;
    
    
        system("pause");
        return 0;
    }
    
    void swap1(int a, int b) {
        int t=0;
        a = t; t = b; b = a;    
    }
    
    void swap2(int* a, int* b) {
        int t;
        t = *a; *a = *b; *b = t;
    }
    
    void swap3(int& a, int& b) {
        int t;
        t = a; a = b; b = t;
    }
    View Code

    6. 引用的性质的补充说明

    int a { 0 }, b { 1 };
    int& r { a };  // 引用变量 r 在声明的同时就要初始化,r是a的别名
      
    r = 42;  // 相当于 a = 42
    r = b;   // 相当于 a = b; 执行后 a 的值是1
             // 此处不是让r变成b的引用
             // 引用r声明并初始化后,r就不能再改为其它变量的引用
    int& r2 = a;  // 继续给a起别名
    int& r3 = r;  // 声明引用变量 r3,用r初始化
                  // 这个相当于 int& r3 = a; 因为 r 是 a 的别名
    View Code

    7. 常量指针引用

    # include <iostream>
    
    int main(){
        const char* x = "Hello";  //Hello为常量,应用常量指针
        const char* y = "Aloha"; 
        const char*& rx = x;      //声明是就得指向
        std::cout << x << std::endl;
        rx = "Hello World";
        std::cout << x << std::endl;
        rx = y;                   //这里不是对y的引用,而是赋值,所以x改变
        std::cout << x << std::endl;    
        system("pause");
        return 0;
    }
    View Code

  • 相关阅读:
    毕业五年后的差距
    基于jsonlib.jar包Json程序 实战篇
    Hashtable
    [转]浏览器是怎样工作的:渲染引擎,HTML解析
    Web.config之连接字介绍
    jQuery选择器全解【转】
    JavaScript document属性和方法
    zoj 2316 Matrix Multiplication 夜
    zoj 2318 Get Out! 夜
    hdu 3666 THE MATRIX PROBLEM 夜
  • 原文地址:https://www.cnblogs.com/zgqcn/p/11321759.html
Copyright © 2020-2023  润新知