c++硬核学习 引用类型

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41616600/article/details/99835113

引用类型

如果为某个变量分配一个引用类型,则该变量将引用(指向)原始值,类似为它创建了一个终身别名,效果类似指针

// helloworld.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//命名空间
int main()
{


    /*********    引用类型    **********/
    int a  = 111;
    int & a1 = a; // a1是引用类型,a1就是a的别名,他们是同一个变量 &是去地址符
    cout << a << " " << a1 << endl;
    cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量

    a1 = 333;
    cout << a << " " << a1 << endl;
    cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量

    int b = 555;
    
    return 0;
}

输出

111 111
008FF800 008FF800
333 333
008FF800 008FF800

由输出可以看到,输出的值是一样的,地址也是一样的。

接下来看一下引用变量的作用
构造一个swap函数用于改变两个变量的值
以下仔细看swap函数和swap2函数的形式参数,swap不是用的地址,swap2用的是地址

// helloworld.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//命名空间


void swap(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

void swap2(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

int main()
{

    int a  = 111;
    int & a1 = a; // a1是引用类型,a1就是a的别名,他们是同一个变量 &是去地址符
    cout << a << " " << a1 << endl;
    cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量

    a1 = 333;
    cout << a << " " << a1 << endl;
    cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量

    int b = 555;
    swap(a,b);
    cout << a << " " << b << endl;
    swap2(a,b);
    cout << a << " " << b << endl;
    return 0;
}


最后发现swap函数没有互换值,但是swap2互换了

引用被赋值的时候,必须初始化,没有空引用,一旦初始化,终身绑定
引用和指针的区别是,指针可以不初始化、指针的值可以变化、可以为NULL,有指针的指针,没有引用的引用
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41616600/article/details/99835113