在C语言中,使用Point(指针)可以间接获取,修改某个变量的值
在C++中,使用引用(Reference),可以起到跟指针类似的功能.
注意点:
- 引用相等于是变量的别名(基本数据类型,枚举,结构体,类,指针,数组等,都可以有引用)
- 对引用的计算,就是对引用所指向的变量做计算
- 在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改吧,从一而终
- 不存在引用的引用,指向引用的指针也是不存在的.引用数组也是不存在的即int &Array[4]不存在.
对基本数据类型的引用
int main () {
int age = 20;
// 定义一个引用,相等于是变量的别名
// rAge相等于是age的别名
int &rAge = age;
// 对引用做计算就是对引用所指向的变量做计算
rAge = 40;
// 从一而终 解释下:
int width = 20;
// 一旦指向就不可以再改变
int &rWidth = width;
int height = 50;
// 这里意思不是让rWidth指向height,因为在初始化的时候rWidth就确定了值为width,就代表以后永远是width,这句话的意思是将height赋值给width,这句话的意思是将50这个值取出来赋值给width,所以下面这个操作是修改了width的值,width变成了50
rWidth = height;
// 指针是可以改指向的,但是引用一旦赋值就不会改变指向,所以指针和引用还是有区别的
}
那么此时age的值变为了40;
对枚举的引用
enum Season {
Spring,
Summer,
Fall,
Winter
};
int main() {
Season season;
// rSeason相等于season的一个别名
Season &rSeason = season;
// 给引用赋值就相等于给season赋值
rSeason = Winter;
那么此时的season的值为3;
}
对结构体的引用
struct Student {
int age;
};
int main() {
Student stu;
Student &rStu = stu;
// 相等于给stu的age赋值为20,rStu是对stu的引用,即别名
rStu.age = 10;
}
对指针的引用
int a = 10;
int b = 20;
// 相等于p指针指向变量a
int *p = &a;
// 那么指针变量p也是可以有引用的,rP是对指针p的引用,rP为p的一个别名
int *&rP = p;
// 将b的地址,赋值给了指针p.
rP = &b;
*p = 30;// 此时b的值为30.
因为
int age = 10;
//创建变量age的一个引用rAge是在变量类型int的右边加上一个&就可以了.
int &rAge = age;
同理指针p的类型是int *,所以对指针p的引用是在类型int *的右边加一个&,就是rP对指针p的引用.
对数组的引用
int array[] = {10,20,30};
// 引用这一个数组的引用
int (&rArray)[3] = array;
int *a[4]; // 数组中的每一个元素都是指针类型,叫做指针数组
int (*b)[4]; // 指向整型数组的指针.
** 引用和指针都可以交换值**
// 引用交换值
void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
int main(){
int v1 = 10;
int v2 = 20;
swap(v1,v2);
}
// 指针交换值
void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int v1 = 10;
int v2 = 20;
swap(&v1,&v2);
}
引用的本质:
int age = 5;
int &rAge = age好像相等于 int *const rAge = &age一样的作用