C++ 引用
引用不是新定义的变量
是给已存在的变量的别名引用变量和实体
用的是同一块空间引用一旦引用实体
不能引用其他实体没有NULL 引用在sizeof中含义不同
底层实现: 引用实际就是一个指针
int& ra = a;
↓转化成
int* const pa = &a;
const int& ra = a;
↓ 转化成
const int* const pa = &a;
引用概念: 编译器不会为引用变量重新开辟空间在
底层实现: 引用实际是有空间的
引用的应用
引用变量和实体 用的是同一块空间
引用一旦引用实体,不能引用其他实体
没有NULL 引用
在sizeof中含义不同, 引用结果为引用类型(实体类型)大小, 指针的是 (32位 4字节 64位 8字节)
没多级引用
指针需要显示解引用,引用编译器自己处理
引用比指针更安全
就比如
{
int a = 10;
int& ra = a; ra是a别名;
return 0;}
ra 和 a 的类型要相同引用在定义时必须要初始化
int& ra = a;
ra = 20;
a就被修改了;
如果代码
int a = 10;
int& ra = a;
a = 20; 得到 ra = 20;
但是
void Swap(int& a, int&b){ int temp = a;a = b;b = temp;}int main(){int a = 10;int b = 20;Swap(a, b);return 0;}
double d = 12.34;c
onst int rd = d;
d = 23.45;
rd 在这里是临时变量(具有常性) 一块新的空间
跟d不是同一块空间rd不被修改 rd还是12 ;
引用的使用场景
void Swap(int& a, int&b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
Swap(a, b);
return 0;
}
如下
int& Add(int a, int b)
{
int ret = a + b;
return ret;
}
int main()
{
int a = 10;
int b = 20;
int& c = Add();
Add(20, 30);
cout << c << endl;
}
返回随机值,第一次调用函数结束后栈的空间还给系统, 内容可能被修改