C++中的引用

本文深入解析C++中引用(Reference)的概念与应用,包括基本数据类型、枚举、结构体、指针和数组的引用,对比指针的区别,并介绍如何通过引用实现值的交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,使用Point(指针)可以间接获取,修改某个变量的值
在C++中,使用引用(Reference),可以起到跟指针类似的功能.
注意点:

  1. 引用相等于是变量的别名(基本数据类型,枚举,结构体,类,指针,数组等,都可以有引用)
  2. 对引用的计算,就是对引用所指向的变量做计算
  3. 在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改吧,从一而终
  4. 不存在引用的引用,指向引用的指针也是不存在的.引用数组也是不存在的即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一样的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值