【C++学习笔记】1-4 “引用”的概念和应用

在这里插入图片描述


1. 背景

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

C++ 引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

2. 引用的概念

下面的写法定义了一个引用,并将其初始化为引用某个变量。
类型名 & 引用名 = 某变量名;

int & r = n; // r引用了n,r的类型是int &

某个变量的引用,等价于这个变量,相当于该变量的一个别名。

int n = 7;
int & r = n;
r = 4;
cout << r; //输出 4
cout << n; //输出 4
n = 5;
cout << r; //输出 5

1.定义引用时一定要将其初始化成引用某个变量。
2.初始化后,它就一直引用该变量,不会再引用别的变量了。
3.引用只能引用变量,不能引用常量和表达式。

double a = 4, b = 5;
double & r1 = a;
double & r2 = r1;  // r2也引用a
r2 = 10;
cout << a << endl; // 输出10
r1 = b;            // r1并没有引用b
cout << a << endl; // 输出5

3. 引用应用的简单示例

C语言中,如何编写交换两个整型变量值的函数?

void swap(int a, int b)
{
    int tmp;  
    tmp = a;
    a = b;  
    b = tmp;  
}

int n1, n2;  
swap(n1, n2); //n1, n2的值不会被交换
void swap(int *a, int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

int n1, n2;
swap(& n1, & n2); /n1, n2的值被交换

有了C++的引用:

void swap(int & a, int & b)
{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}

int n1, n2;  
swap(n1, n2); //n1, n2的值被交换  

4. 引用作为函数的返回值

int n = 4;
int & SetValue(){return n;}
int main()
{
    SetValue() = 40;
    cout << n;
    return 0;
} //输出:40

5. 常引用

定义引用时,前面加const关键字,即为“常引用”

int n;
const int & r = n;

r的类型是 const int &

不能通过常引用去修改其引用的内容:

int n = 100;
comst int & r = n;
r = 200; //编译错  
n = 300; //没问题  

6. 常引用和非常引用的转换

const T & 和T & 是不同的类型!!!

T & 类型的引用或T类型的变量可以用来初始化const T & 类型的引用。

const T 类型的常变量和const T &类型的引用则不能用来初始化T &类型的引用,除非进行 强制类型转换


站在巨人的肩上
【1】北京大学信息技术学院《程序设计实习》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值