C++入门(引用)

目录

一、引用


一、引用

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

格式:

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int& b = a;
	cout << &a << endl;
	cout << &b << endl;
	return 0;
}

(一)引用的功能1:做函数形参,修改形参影响实参

cpp 复制代码
void swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

void swap(int& p1, int& p2)
{
	int tmp = p1;
	p1 = p2;
	p2 = tmp;
}

(二)引用的功能2:做函数形参,减少拷贝,提高效率

cpp 复制代码
struct A {
	int a[100];
	int b;
};

void func(struct A* aa)
{
}

void func(struct A& aa)
{

}

(三)引用的功能3:引用做返回值类型,修改返回对象

(四)引用的功能4:引用做返回值类型,减少拷贝,提高效率

cpp 复制代码
typedef struct SeqList
{
	int* a;
	int size;
	int capacity;
}SL;

void SLInit(SL& sl, int n = 4)
{
	sl.a = (int*)malloc(n * sizeof(int));
	// ...
	sl.size = 0;
	sl.capacity = n;
}

void SLPushBack(SL& sl, int x)
{
	// ...扩容
	sl.a[sl.size] = x;
	sl.size++;
}
int& SLAt(SL& sl, int i)
{
	assert(i < sl.size);
	return sl.a[i];
}

需要注意的是,有的时候返回引用是不安全的的,比如返回一个临时对象的引用,比如如下:

ret是局部对象func结束,ret就销毁的了,返回他的别名本质也一种类似野指针的行为

cpp 复制代码
int& func()
{
	int ret = 0;
	//...

	return ret;
}

int& fxx()
{
	int xxx = 1000;
	//...

	return xxx;
}
相关推荐
凉茶钱11 小时前
【数据结构】C语言实现队列
c语言·数据结构
zander25812 小时前
34. 在排序数组中查找元素的第一个和最后一个位置:用两个边界定位区间
数据结构·算法·leetcode
啊啊啊啊啊!!!!1 天前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
(Charon)1 天前
【C++】锁与原子操作(四):自旋锁的完整实现与性能优化
c语言·开发语言·c++
ShineWinsu1 天前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
呜喵王阿尔萨斯1 天前
extern “C“ in C++
c语言·c++·算法
乐观勇敢坚强的老彭1 天前
C++信奥静态数组和动态数组
数据结构·c++·算法
gumichef1 天前
第一章:面向对象核心——类和对象深度讲解
开发语言·c++
ao-weilai1 天前
C++基础:类和对象
开发语言·c++
郝学胜-神的一滴1 天前
[简化版 GAMES 104] 现代游戏引擎 04:从0到1构建你的游戏世界
c++·游戏·unity·游戏引擎·软件工程·unreal engine