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;
}
相关推荐
linx29526 分钟前
第七章 · 标准库容器、算法与 ranges
c语言·开发语言·数据结构·c++·算法
钓鱼的肝30 分钟前
csp-j-s总结(4)
c++·经验分享·笔记·算法
Logic10143 分钟前
C语言/数据结构位运算题解:异或XOR找出独特数字的索引位置——成对数字在两侧
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
橘子汽水16844 分钟前
Leetcode 763,45 划分字母区间 跳跃游戏II
数据结构·算法·leetcode
别动我齐刘海1 小时前
ROS2 Jazzy + C++ 实战路线——基础学习1
c++·vscode·python·ubuntu·机器学习·自动驾驶·github
kiracrimson1 小时前
建堆的两种算法:O(N) 和 O(N log N) 差在哪里
数据结构
j7~1 小时前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
天天喝旺仔1 小时前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
青少儿编程课堂1 小时前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode