C++之引用

本文详细介绍了C++中的引用概念,包括其作为变量别名的作用、初始化规则、作为函数参数和返回值的用途。引用的本质被解析为内部实现为指针常量,确保引用一旦绑定到变量就不能改变。此外,常量引用用于保护函数形参不被意外修改,提供了一种安全的参数传递方式。文章通过实例展示了引用的各种用法及其优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

引用

引用注意事项

引用做函数的返回值

引用的本质

常量引用

引用


    作用:给变量起别名
    引用基本语法:
    数据类型 &别名 = 原名
    例如:
        int a = 10;
        int &b = a;
    现在b的地址就是a的地址,改变b地址中的内容相当于改变a地址中的内容
    例如:
        b = 100;
    则现在a和b都等于100

引用注意事项


    1)引用必须初始化
        int& b;    //这样写是错误的,引用必须一开始就初始化,明确引用的是哪一个
    2)引用在初始化后。不可以改变
        int& b = a;    //引用一旦初始化后,就不可以更改了

10. 引用做函数参数
    作用:函数传参时,可以利用引用的技术让形参修饰实参
    优点:可以简化指针修改实参
    例:

void mySwap(int& a, int& b)
        {
            int temp;
            temp = a;
            a = b;
            b = temp;
        }

引用做函数的返回值


    1)不要返回局部变量的引用

int& test()
        {
            int a = 10;
            return a;
        }

        int main()
        {
            int& a = test();
            cout << a << endl;
            cout << a << endl;
            cout << a << endl;
            //这样第一次输出a的值为10(编译器的功劳,不然第一次也出不来10),其他的都为一堆乱七八糟的数
        }

    2)如果函数的返回值是引用,这个函数调用可以作为左值

//可以返回静态变量引用
int& test02()
{
    static int a = 10;    //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;    
    }

int main()
{
    int& a1 = test02();        //其实这里a1是test02()函数中返回值静态变量a的别名
    cout << a1 << endl;
    cout << a1 << endl;
    cout << a1 << endl;
    
    //如果函数的返回值是引用,这个函数调用可以作为左值
    test02() = 1000;    //相当于对test02()函数中的a进行操作
    cout << a1 << endl;
    cout << a1 << endl;

    system("pause");
    
    return 0;
}

引用的本质


    本质:在c++内部实现是是一个指针常量(int* const ref = &a)
    起始从引用的性质就可以看出
    例如:引用必须初始化,而且初始化之后就不可以再改变了

    int& ref = a;//当出现这行代码,编译器会自动转换为 int* const ref = &a;指针常量是指针指向不可更改,也说明了为什么引用一旦初始化就不可更改
    ref = 20;//内部发现ref是引用,自动帮我们转换为:*ref = 20;

常量引用


    作用:常量引用主要用来修饰形参,防止误操作
    在函数形参列表中,可以加const修饰形参,防止形参改变实参

    例:

    //引用使用的场景,通常用来修饰形参
    void test(const int& v)
    {
        //v += 10;
        cout << v << endl;
    }

    int main()
    {
        //int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误
        //加入const就可以了,编译器优化代码,int temp = 10;const int& ref = temp;
        const int& ref = 10;

        //ref = 100;  //加入const后不可以修改变量
        cout << ref << endl;

        //函数中利用常量引用放防止误操作
        int a = 10;
        test(a);

        system("pause");

        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值