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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!