C++基础3: 引用

 

前言

本篇首先回顾指针的概念, 用C指针的缺陷引出C++中的引用, 然后对引用进行说明

比如, 什么是引用? 引用解决指针什么问题? 引用的特性和使用等等

1. 指针

什么是指针

指针是内存单元的地址, 口语中的指针实际上是指针变量, 存储地址的变量

#include <stdio.h>
int main()
{
int a = 0;
// 指针变量 pa
int* pa = &a;
}

这里的pa就是一个指针变量, 存储变量a的地址

pa前面的*表示pa是一个指针变量, *前面int表示存储的是一个整形变量的地址, 所以pa是一个整形指针

现在知道了什么是指针, 指针是有分类的, 下面具体说一下指针的分类

指针的分类

#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int main()
{
int a = 0;
// 整形指针 pa
int* pa = &a;
// 字符指针 ps
char* ps = "abc";
// 二级指针ppa
int** ppa = &ppa;
int b = 0;
int c = 1;
int d = 2;
int* parr[3] = { &b, &c, &d }; //指针数组 parr
int arr[5] = { 0,1,2,3,4 };
int(*pc)[5] = &arr; //数组指针 pc
// 函数指针 ptr1
int(*ptr1)(int, int) = add;
// 函数指针数组 ptr2
int(*ptr2[3])(int, int) = { add,sub,mul };
}

指针的缺陷

如上述列举的指针类型, 二级指针, 数组指针, 指针数组... 所以指针的缺陷很明显, 就是太复杂了

C++为了简化指针引入引用来降低指针的复杂性

2. 引用的概念

什么是引用

引用就是给一个已经存在的变量取别名, 如下例子

b 是变量a的一个别名, 打印b的值就是打印a的值,因为它们实际上指向的是同一块的内存空间

注意, 在学习引用的初阶, 建议这样理解引用:

引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间

引用的定义与特性

定义引用的语法:

类型& 引用变量名(对象名) = 引用实体

#include <iostream>
using namespace std;
int main()
{
int a = 1;
int& b = a; // 引用 b
}

引用的特性:

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用

#include <iostream>
using namespace std;
int main()
{
int a = 1;
int& b = a;
int& c = a;
}

3. 引用一旦引用一个实体,不能再引用其他实体

b = x, 是将x指向的值赋值给b指向的值, 而不是引用b更改引用的对象

3. 引用的使用

引用作为函数形参

#include <iostream>
using namespace std;
void swap(int& x, int& y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 1;
int b = 2;
printf("%d %d\n", a, b);
swap(a, b);
printf("%d %d\n", a, b);
}

引用作为函数返回值

#include <iostream>
using namespace std;
int& count()
{
static int n = 0;
n++;
return n;
}
int main()
{
int ret = count();
cout << ret << endl;
}

  

posted @   许木101  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示