C++基础--随堂代码总结--引用的本质
(1) 引用作为其他变量的别名而存在,在一些场合可以代替指针;
(2)单独定义普通引用时 必须初始化,很像一个常量;
int &b = a;//b是一个引用 b是a的别名
(3)引用也占内存空间,和指针一样;
//...
struct typeA
{
int &a;
};
struct typeB
{
int *a;
};
//...
cout<<"sizeof(struct typeA)"<<sizeof(struct typeA)<<endl;
cout<<"sizeof(struct typeB)"<<sizeof(struct typeB)<<endl;
//引用所占用的大小 跟指针是一样的 结果都为4
//...
(4)引用的本质
1)引用在C++中的内部实现是一个指针;
int name = int *const name
2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同
3)从使用的角度来看,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏
#include <iostream>
using namespace std;
struct typeA
{
int &a;
};
struct typeB
{
int *a;
};
struct student
{
int id;
char name[64];
};
void motify(int *const a) //int *const a = main::&a
{
*a = 30;
}
void motify2(int &a)
{
a = 30;//对一个引用赋值的时候,编译器替我们隐藏*操作
}
//如果我们在去研究引用的时候,可以将引用当做一个常指针去研究
//编程的时候,把引用理解为变量的别名就可以
int main()
{
cout<<"sizeof(struct typeA)"<<sizeof(struct typeA)<<endl;
cout<<"sizeof(struct typeB)"<<sizeof(struct typeB)<<endl;
//引用所占用的大小 跟指针是一样的
int a = 10;
int &b = a;
motify(&a);
motify2(b);
cout <<"a="<<a<<endl;
cout <<"b="<<b<<endl;
return 0;
}