&:在引用中不是求地址运算,仅仅起到一个标识的作用。
引用
引用是对数据起别名,通过别名或者原名称都可以找到这份数据,相当于目标变量有两个名称。因此,编译器并不会给引用开辟新的内存空间。
格式
数据类型 &引用变量名=原变量名;
int a=0;
int &ra=a;
在定义时,加&起标识作用,使用时,不加&,加上代表取地址。
常引用
在引用前加const修饰,常引用不能对变量的值进行修改,可以起到保护原数据的作用。
引用=取别名,取别名前后权限只能不变或者缩小,加const后修饰,只有读的权限。
const int &ref=a;
使用场景
1.引用传递:引用作为函数的形参。这样如果在函数体中修改了形参的数据,实参的数据也会被修改。
2.做函数的返回值,减少拷贝。
注意:不能返回局部数据(例如局部变量、局部对象、局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了
引用和指针的区别
引用在定义时必须初始化,并且从一而终,不能指向其他数据。而指针在定义时可以不必赋值,也可以指向其他数据。
引用只有一级(&),而指针可以有多级(*,**)。
引用自增是实体加一,而指针自加则是向后偏移一个类型的大小。
在sizeof中,引用是引用类型的大小,而指针则是地址空间所占字节的个数(64位8B,32位4B)。