zoukankan      html  css  js  c++  java
  • C++指针和引用

    指针

    指针存储的是变量的地址。*是dereferencing,根据地址去读取值;&是取地址符,ampersand.

    定义指针的格式一般为:

    datatype *var_name;
    
    int a = 10;
    int *p = &a;  
    

    直接打印p,打印的是地址;打印*p,根据地址取值;变量a就是10;&a表示a的引用。

    指针的加减

    在连续地址上移动

    引用

    引用和原变量一起变。

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int x = 10;
        
        // ref is a reference to x.
        int& ref = x;
        
        // Value of x is now changed to 20
        ref = 20;
        cout << "x = " << x << endl ;
        
        // Value of x is now changed to 30
        x = 30;
        cout << "ref = " << ref << endl ;
        
        return 0;
    }
    
    引用的应用场景

    第一个应用场景是函数参数的引用传递,这样可以避免复制很大的数据结构。

    #include<iostream>
    using namespace std;
    
    void swap (int& first, int& second)
    {
            int temp = first;
            first = second;
            second = temp;
    }
    
    int main()
    {
            int a = 2, b = 3;
            swap(a, b);
            cout << a << " " << b;
            return 0;
    }
    

    第二个应用场景是在循环中修改数据。一般在遍历的时候无法修改值。

    int main()
    {
      vector<int> vect{1, 2, 3, 4, 5};
      for(int& a: vect){
          a += 1;
      }
      //...
    }
    

    这样vec的每个值都增加了1.

    指针和引用的对比

    1. 指针可以为空,但是引用不行;
    2. 指针有一级指针、二级指针甚至多级指针,但是引用只能有一级(只能有一个&);
    3. 指针比引用更加强大:
    • 引用一旦创建就固定了,但是指针可以更换;
    • 引用在声明的时候就必须初始化,但是指针不必;
    1. 引用比指针更加简单,更加安全。
  • 相关阅读:
    [BZOJ2434][Noi2011]阿狸的打字机
    [BZOJ2303][Apio2011]方格染色
    [BZOJ1912][Apio2010]patrol 巡逻
    [BZOJ1179][Apio2009]Atm
    [BZOJ1178][Apio2009]CONVENTION会议中心
    Lock-less buffer management scheme for telecommunication network applications
    vue-router@2.x 只适用于 Vue 2.x 版本。
    jQuery 捕获
    jQuery Chaining
    jQuery Callback 方法
  • 原文地址:https://www.cnblogs.com/YoungF/p/14509193.html
Copyright © 2011-2022 走看看