引用

程序员成长之旅 · 程序员成长之旅/C++ · 413 字

引用是变量的别名

对于一个变量来说**, 不能只有别名**

** **

** **

基本数据类型的引用

#include <iostream>
using namespace std;
int main(){
    int a = 3;
    int &c = a; //这里的"&"就是引用符号, 代表c引用了a, 同时引用必须初始化.(因为你不能只有别名没有真名)
    c = 10; //这里对c进行操作实际上就会对a操作, 不只是赋值, 也可以干和被引用对象的任何事情.
    cout<<a<<endl;
    return 0;
}

结构体类型引用

#include <iostream>
using namespace std;
typedef struct{
    int x;
    int y;
}Coor;

int main(){
    Coor c1;
    Coor &c = c1;
    c.x = 10;
    c.y = 20;
    cout << c1.x << c1.y;
    return 0;
}

指针类型的引用

指针类型引用和普通类型引用以及结构体类型的引用的定义方式不同

类型 *&指针引用名 = 指针;
#include <iostream>
using namespace std;
int main(){
    int a = 10;
    int *p  = &p;
    int *&q = p;
    *q = 20;
    cout << a << endl;
    return 0;
}

引用作为参数函数

// 伪代码
//函数:传入两个值并交换

//使用引用实现(简单, 易懂)
void fun(int &a, int &b){
    int c = 0;
    c = a;
    a = b;
    b = c;
}
int x = 10, y = 20;
fun(x,y);

//分割线


//使用指针实现(非常不美观, 且难懂)
void fun(int *a, int *b){
    int c = 0;
    c = *a;
    *a = *b;
    *b = c;
    //非常不美观
}
int x = 10, y = 20;
fun(&x, &y);
// 使用引用实现
//普通数据类型
#include <iostream>
using namespace std;

void switchVars(int &a, int &b){
    int c = a;
    a = b;
    b = c;
}
int main() {
    int x = 10, y = 20;
    cout << "初始" << endl;
    cout << "x:" << x << "y:" << y << endl;

    switchVars(x,y);
    cout << "交换后" << endl;
    cout << "x:" << x << "y:" << y << endl;
}