C++ 引用的本质

引用的意义:

    1)引用作为其他变量的别名而存在,因此在一些场合可以代替指针

    2)引用相对于指针来说具有更好的可读性和实用性

引用的本质:

    1、单独定义普通引用时 必须初始化,说明很像一个常量

#include<iostream>

using namespace std;

//1、第一点  单独定义普通引用时 必须初始化,说明很像一个常量

int main()

{

            const int c = 32;

            int a = 10;

            int &b = a;                                 //b很像一个常量 定义时必须初始化

            cout << "&a="<<&a<< endl;

            cout << "&b=" << &b << endl;//a 和b就是同一块内存空间的名字

            system("pause");

}

2、普通引用也占内存空间

#include<iostream>

using namespace std;

//2、第二点 普通引用也占内存空间 

struct Teacher

{

            char name[64];    //占64个字节的内存空间

            int a;                   //占4个字节的内存空间

            

            char &e;  //占4个字节的内存空间

            int &r;     //占四个字节的内存空间,像指针一样

};

int main()

{

            cout << sizeof(Teacher)<< endl;

            system("pause");

}

//输出结果为76

3、引用的本质

    1)引用在C++中的内部实现是一个指针

           int name = int *const name

    2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同

    3)从使用的角度来看,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏


 

#include<iostream>

using namespace std;

void modifyA(int &a)

{

            a = 100;

}

void modify2(int *const a)

{

            *a = 200;

}

int main()

{

            int a = 20;

            modifyA(a);       //指向这个函数调用时,我们程序员不需要取a的地址

            cout << "a1="<<a<< endl;        //输出结果为100

            a = 20;

            modify2(&a);    //如果是指针,需要我们程序员手工的取实参的地址

            cout << "a2="<<a<< endl;        //输出结果为200

            system("pause");

}

猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/81710059
今日推荐