C++学习笔记——核心篇(二)

前言:本部分内容主要是C++语言中关于引用的相关介绍与使用,属于拓展类知识,对于想要对C++语言进行进一步学习的,以及要学会优化程序的,建议掌握。

目录

1、引用

    1.1、引用的基本使用

    1.2、引用的注意事项

    1.3、引用作函数参数

    1.4、引用做返回值

    1.5、引用的本质

    1.6、常量引用


1、引用

    1.1、引用的基本使用

        作用:给变量起别名
        语法:

数据类型 &别名 = 原名;

    1.2、引用的注意事项

        1、引用必须初始化            

int &b;//错误的

        2、引用在初始化后不可以改变

int a = 10;
int &b = a;
int c = 20;
b = c;//这是赋值操作,而不是更改别名

    1.3、引用作函数参数

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

//交换函数
                
//1、值传递
void mySwap01(int a, int b)
{    
    int temp = a;
    a = b;
    b = temp;
}

//2、地址传递
void mySwap02(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;

    cout << "在mySwap02函数中的 a = " << *a << endl;
    cout << "在mySwap02函数中的 b = " << *b << endl;
}

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


int main()
{
    int a = 10;
    int b = 20;
    mySwap01(a,b);//    值传递        形参不会修饰实参
    mySwap02(&a, &b);//    地址传递    形参会修饰实参
    mySwap03(a, b);//    引用传递    形参会修饰实参(别名可以于原名一样)
}


            小结:通过引用参数产生的效果与地址传递是一样的。引用的语法更清楚简单

    1.4、引用做返回值

        作用:引用是可以作为函数的返回值存在的
        注意:不要返回局部变量引用
        用法:函数的调用可以作为左值

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

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


int main()
{
    int &ref = test01();

    cout << "ref = " << ref << endl;    //第一次结果正确,是因为编译器做了保留
    cout << "ref = " << ref << endl;    //第二次结果错误,因为a的内存已经释放

    int &ref2 = test02();    //相当于给变量a起了别名ref2
    cout << "ref2 = " << ref << endl;
    cout << "ref2 = " << ref << endl;

    //相当于将1000赋值给变量a;如果函数的返回值是引用,这个函数调用可以作为左值
    test02() = 1000;   
 
    //若函数作为左值,那么必须返回引用
    cout << "ref2 = " << ref << endl;
    cout << "ref2 = " << ref << endl;
}

    1.5、引用的本质

        本质:引用的本质是在C++内部实现一个指针常量(指针的指向是不能修改的,但指针的值是可以改动的)

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

int main()
{
    int a = 10;

    //自动转换为 int* const ref = &a; 指针常量是指针指向不可更改,也说明为什么引用不可以更改
    int& ref = a;
    ref = 20;//内部发现ref是引用,会自动帮我们转换为 *ref = 20

    cout << "a: " << a <<endl;
    cout << "ref: " << ref << endl;

    func(a);
    return 0;
}

    1.6、常量引用

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

//1、
//该操作是错误的,引用必须引一块合法的内存空间
//int &ref = 10;    
//该操作就是正确的;加上 const 之后,编译器将代码修改成:int temp = 10;
const int &ref = 10;    
const int &ref = temp;
                
//2、
//加上 const 之后,就不能再在函数中对形参进行改动
void showValue(const int &val)    
{
    cout << "val = " << val << endl;
}

int main()
{
    int a = 10;
    showValue(a);
}


 

尾声:以上是我学习是做的笔记,可供大家参考学习,若有不准确的地方,欢迎指出!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值