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 @ 2023-04-25 19:33  许木101  阅读(136)  评论(0)    收藏  举报