引用的意义:
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");
}