语法:类型 &引用名=目标变量名;
对数组的引用
语法:类型 (&引用名)[数组中元素数量]=数组名;
对指针的引用
语法:类型 *&引用名=指针名;//可以理解为:(类型*) &引用名=指针名,即将指针的类型当成类型*
常引用
语法:const 类型 &引用名=目标变量名;
4、引用 --- 变量的别名
引用定义:数据类型 &引用名 = 变量名;
1、引用就是变量的别名,对引用的操作就相当于对变量的操作
2、不会给引用分配内存空间,引用和变量共享一块内存空间
3、一个变量可以有多个引用,但是一个引用只能对应一个变量(因为引用在定义时,必须要进行初始化,
也就是已经确定了它是这个变量的别名了)
4、引用也可以有引用
常引用:
const 数据类型 &引用名 = 变量名;
总结:如果常引用是变量的别名,不能通过常引用修改变量的值
常引用也可以是常量的别名,非常引用不能是常量的别名
注意:&前有数据类型就是引用,没有数据类型就是取地址
联系:通过指针和引用都可以访问变量
#include<iostream>
using namespace std;
int main(){
double a=10.3;
int &b=a; //错误,引用的类型必须和其所绑定的变量的类型相同
cout<<b<<endl;
}
#include<iostream>
using namespace std;
int main(){
int &a; //错误!声明引用的同时必须对其初始化
return 0;
}
指针和引用的区别:
1、指针是间接访问,引用是直接访问
2、引用必须初始化,指针可以不初始化
3、指针会分配内存空间,而引用不会分配,和变量共享
4、指针的指向可以改变,引用不能变成其他变量的引用
5、指针的运算移动一个数据类型,而引用的运算就是变量的运算
6、有二级指针(int **),没有二级引用(int &&)
7、有void *类型的指针,但是没有void类型的引用
8、指针有数组指针有函数指针,没有数组引用和函数引用