c++的引用(&)

个人总结和理解

引用(reference)的定义:

int a;
int &b = a;

C++中的引用即是给变量起别名。变量在编译的时候用内存地址替换,相同的变量名用相同的地址替换,变量名只是给这个内存地址单元起了一个我们方便编程的一个名字。那么引用的定义便是给这个内存空间在原有的名字基础上,再次起了一个别名,而不是重新分配内存空间。编译器在编译的时候,这两个不同的名字就用相同的地址替换。那么上边的定义中,变量a,b便是同一个地址单元的不同的两个名字。

1、引用是一种关系型声明,声明的时候必须初始化,一经声明,不可变更。
2、可对引用再次引用,多次引用的结果是某一变量具有多个别名。

C++中的引用,让很多需要上级指针才能完成的事情变成可在平级内进行。
例如:

//在C语言中想要实现两个数据的交换(int a,int b)
void  swap(int m,int n)
{
    int temp;
    temp = n;
       n = m;
       m = temp
} 
//显然无法实现。需要用到指针 
void  swap(int* p,int* q)
{
    int temp;
    temp = *p;
       *p = *q;
       *q = temp;
}
//函数调用时需要写成 swap(&a,&b);

//在C++中,引用作为函数的参数
void  swap(int& m ,int& n)
{
    int temp;
    temp = n;
       n = m;
       m = temp
} 
//可完成,函数调用时直接写成swap(a,b);

我的理解为,在函数调用的时候,给变量a起了别名m,b起了别名n,所对应的内存空间一致,那么对于m,n的操作,a,b的值也会改变,实现交换。一句话就是:引用是对变量作用域的一种扩展。

定义指针的引用 :
int* p = &a;
int*& q = p;
//但不能对引用再次引用,也不能定义引用的指针

定义数组的引用
int arr[3] = {1,2,3};
int(&arrr)[3] = arr;

(&)是取地址还是定义引用需要根据具体的语境决定,c++中对其进行了重载。


4月3日补充:
常引用
1、const对象的引用必须是const的,将普通的引用绑定到const对象是不合法的。

const int a = 1;
int &b = a;        //这种写法是不合法的,编译不过。

2、const引用可使用相关类型的对象(常量、非同类型的变量和表达式)初始化。这个是const引用于普通引用的最大区别。

const int &a = 2;  //合法
double x = 3.14;
const int &b = a;  //合法

const引用的目的是,禁止通过修改引用的值来改变被引用的对象

const引用使用相关类型对象初始化时发生了如下过程:

int temp = val;
const int &ref = temp;
//建立了一个无名的临时空间,引用是对无名的临时空间变量的引用。

举例说明:

double val = 3.14;
const int &ref = val;
double &ref2 = val;
cout<<ref<<" "<<ref2<<endl;
val = 4.14;
cout<<ref<<" "<<ref2<<endl;

上述输出的结果是3 3.14和3 4.14。 因为ref是const的,在初始化的过程中已经给了定值,不允许修改(建立无名的临时变量空间),而被引用的对象是val是非const的,所以val的修改并未影响到ref的值。而ref2的值发生了相应的变化。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值