zl程序教程

您现在的位置是:首页 >  其他

当前栏目

C++引用【cherno课程学习】

2023-04-18 15:20:31 时间

定义

int main() {
    int a = 5;
    int* b = &a;//这个是指针
    int& ref = a;//这个是引用
    std::cin.get();
}
  1. ref变量实际上不存在,只存在于源代码中,
  2. 如果对代码进行编译,实际上不会得到两个变量aref,只会得到a

ref进行修改,结果a也会受到改变

使用

void Incrament(int value){ //注意这里没有使用引用&
    value++;
}
int main() {
    int a = 5;
    Incrament(a);
    std::cout << a << std::endl; //结果为  5
    std::cin.get();
}

我们实际上没有将值传递给函数,我们可以将变量a的地址传递过去,在函数里查找这个地址然后对地址上的数字进行修改。即下面这段代码

void Incrament(int* value){ //表示这个函数需要传入的是指针,即地址
    (*value)++; //注意这里还要解引用
}
int main() {
    int a = 5;
    Incrament(&a); // 传入a的地址
    std::cout << a << std::endl;//结果为6
    std::cin.get();
}

接下来对上述代码进行简化---使用引用&

void Incrament(int& value){//主要改变在这里,使用了引用&
    value++;
}
int main() {
    int a = 5;
    Incrament(a);
    std::cout << a << std::endl;// 结果为 6
    std::cin.get();
}

实际上,就是定义了函数的外部变量,我想在这个函数里面对这个外部变量进行修改

  1. 引用能做的,指针都可以完成
  2. 指针比引用更加强大
  3. 能使用引用就使用引用,因为引用能使得代码看的更加简洁
  4. 引用不是一个变量,定义了后就必须赋值

引用的注意点

int main() {
    int a = 5;
    int b = 8;
    int& ref = a;
    ref = b; // 这句话的意思将b的值赋给a

  //代码走到这里 a=8,b=8

    std::cout << a << std::endl;
    std::cin.get();
}

如果需要更改引用的话,需要使用指针的思路

int main(){
  int a = 5;
  int b = 8;
  int* ref = &a;
  *ref = 2;
  ref = &b;
  *ref = 1;

//结果会输出 a = 2  b = 1
}