CPP - 引用

CPP - 引用,第1张

引用的基本使用

作用:给变量起别名

语法:数据类型 &别名 = 原名

int main() {
    int a = 10;
    int &b = a;
    cout << a << endl;
    cout << b << endl;
    b = 100;
    cout << a << endl;
    cout << b << endl;
    return 0;
}
引用注意事项
  • 引用必须初始化
  • 引用在初始化后,不可以改变
int main() {
    int a = 10;
    int b = 20;
    // int &c; 错误,引用必须初始化
    int &c = a; // 一旦初始化后,就不可以更改
    c = b; //这是赋值 *** 作,不是更改引用
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    return 0;
}
引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

// 值传递
void swap1(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

// 地址传递
void swap2(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 引用传递
void swap3(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int a = 10;
    int b = 20;
    swap1(a, b);
    cout << a << endl;//10
    cout << b << endl;//20
    int c = 30;
    int d = 40;
    swap2(&c, &d);
    cout << c << endl;//40
    cout << d << endl;//30
    int e = 50;
    int f = 60;
    swap3(e, f);
    cout << e << endl;//60
    cout << f << endl;//50
    return 0;
}
引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

//引用做函数的返回值
//1.不要返回局部变量的引用
int &test1() {
    int a = 10;//局部变量存放在四区中的栈区
    return a;
}

//2.如果函数的返回值是引用,这个函数的调用可以作为左值
int &test2() {
    static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}

int main() {
    int &ref1 = test1();
    cout << ref1 << endl;// 什么都没有
    int &ref2 = test2();
    cout << ref2 << endl;// 10
    test2() = 100;
    cout << ref2 << endl;// 100
    return 0;
}
引用的本质

本质:引用的本质在c++内部实现是一个指针常量

// 发现是引用,转换为 int *const ref = &a;
void func(int &ref) {
    ref = 100; // ref是引用,转换为 *ref = 100;
}

int main() {
    int a = 10;
    // 自动转换为 int *const ref = &a;指针常量是指针指向不可改,也说明为什么引用不可更改
    int &ref = a;
    ref = 20;// 内部发现 ref 是引用,自动帮我们转换为:*ref = 20;
    cout << a << endl;//20
    cout << ref << endl;//20
    func(a);
    cout << a << endl;//100
    cout << ref << endl;//100
    return 0;
}
常量引用

作用:常量引用主要用来修饰形参,防止误 *** 作

在函数形参列表中,可以加const修饰形参,防止形参改变实参

// 引用使用的场景,通常用来修饰形参
void showValue(const int &v) {
    // v = 100; 会报错,加 const 不能修改引用值,
    // 如果不加const,可以修改引用值,但是实参也会被修改。
    cout << v << endl;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1353614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存