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;
}
相关推荐
lcj25111 小时前
【list】手撕C++ list!从0到1实现双向链表,迭代器、const迭代器、模板全解析,面试官都惊呆了!
c++·笔记·链表·list
fengxin_rou1 小时前
leetcode二维数组高频面试题详解:48.原地旋转矩阵 + 240.杨氏矩阵查找算法深度剖析
数据结构·leetcode·java 算法·面试算法
玖釉-2 小时前
Vulkan Specialization Constants 详解:在“运行时配置”和“编译期优化”之间取得平衡
c++·windows·图形渲染
05候补工程师2 小时前
【408 数据结构】图论核心算法(拓扑/关键路径)与二叉搜索树精髓夺分笔记
数据结构·经验分享·笔记·考研·算法·图论
-FxYaM-2 小时前
【UE】渲染框架学习路径-初次修改源码
服务器·网络·c++·windows·ue5·unreal engine
郝学胜-神的一滴2 小时前
Qt 高级开发 025:打造优雅界面的艺术与高效重构之道
开发语言·c++·qt·程序人生·重构·软件构建·用户界面
froyoisle2 小时前
CSP 真题解析:[CSP-J 2025-T3] 异或和
c++·算法·csp·算法竞赛·信奥赛
迈巴赫车主2 小时前
Prim堆优化
数据结构·算法·prim
郝学胜-神的一滴2 小时前
干货版《算法导论》08:哈希——重构集合数据结构的速度魔法
数据结构·python·程序人生·算法·重构·软件构建·哈希算法