C++引用的学习

引用系列

本质:在C++内部是一个指针常量

1.语法 数据类型 &别名 = 本名

提要点:
1.引用必须初始化
2.引用在初始化后,不可改变值

#include<iostream>
using namespace std;

    //用引用代替指针
void swap1(int a,int b)
{
    int tmp = a;
    a = b;
    b = tmp;
    cout<<a<<" "<<b<<"\n";//仅在函数体内部交换
}
int main()
{
    //引用基本语法:实例
    // int a = 10;
    // int &b = a;
    // b = 20;
    // cout<<a<<"\n";
    // int a = 10;
    // int &b = a;
    // int &c = a;//报错!引用 变量 "c" 需要初始值设定项
    // int d = 20;
    // b = d;//赋值操作,而不是更改引用
    // cout<<b<<c<<"\n";

    int a = 10,b = 20;
    swap1(a,b);
    cout<<a<<" "<<b<<"\n";//值传递其实没有实质上的交换,只是拷贝了一份,在内部函数进行交换
    return 0;
}


2.引用传参

注意:形参会影响实参
地址传递

//地址传递
#include<iostream>
using namespace std;
void swap1(int *a,int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap1(&a,&b);
    cout<<a<<" "<<b<<"\n";

    return 0;
}

引用传递

#include<iostream>
using namespace std;
void swap1(int &ar,int &br)
{
    int tmp = ar;
    ar = br;
    br = tmp;
}
int main()
{
    int a = 10,b = 20;
    swap1(a,b);
    cout<<a<<" "<<b<<"\n";

    return 0;
}


3.引用做函数返回值

提要点:
1.不要返回局部变量的引用
2.函数调用作为左值(也就是函数调用可以被赋值)

#include<iostream>
using namespace std;
//不要返回局部变量
//原因如下
// int &test()
// {
//     int b = 10;
//     return b;
// //这里是返回局部变量,属于栈区,程序执行完后直接丢掉
// //我这里显示直接报错了
// }


//接下来是函数可以作为左值的实例
int &test1()
{
    static int a = 10;//把它化为静态变量,属于全局区,不会因为程序的结束而自动释放变量
    return a;
}

int main()
{
    // int &h = test();
    // cout<<h<<"\n";
    int &h = test1();
    cout<<h<<"\n";
    return 0;
}


4.常量引用

提要点:主要是为了防止误修改的值影响原本应该要操作的值

#include<iostream>
using namespace std;
void Print(const int &a)//改成const常量就不会轻易修改值了
{
    //a = 500;//如果我任意改一下值,那么形参里的数值也会变
    cout<<a<<"\n";
}
int main()
{
    //int &tmp = 10;//注意:这里报错了,引用的时候必须是一个合法的内存空间

    //const int &tmp = 10;
    //这里的const 将它修饰成了:
    /*
    int a = 10;
    int &tmp = a;
    */
    int tmp = 10;
    Print(tmp); 
    return 0;
}
posted @ 2025-02-04 12:27  Alaso_shuang  阅读(41)  评论(0)    收藏  举报
2 3
4