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. 引用比指针更加简单,更加安全。
原文地址:https://www.cnblogs.com/YoungF/p/14509193.html