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;
}
相关推荐
闪电悠米5 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
从零开始的代码生活_7 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
yuannl108 小时前
图的存储方式
数据结构
大彼方..8 小时前
C++ STL Vector 深度剖析:从内存管理到性能优化
开发语言·c++
炸薯条!8 小时前
从零开始学C++ (内存管理)
java·jvm·c++
会编程的小孩9 小时前
初识数据类型以及变量定义
数据结构·算法
梅梅绵绵冰9 小时前
数据结构-时间复杂度
数据结构·算法
cpp_250110 小时前
P6625 [省选联考 2020 B 卷] 卡牌游戏
数据结构·c++·算法·前缀和·贪心·洛谷题解·省选
起予者汝也11 小时前
Python 数据结构
开发语言·数据结构·python
Frostnova丶12 小时前
(17)LeetCode 41. 缺失的第一个正数
数据结构·算法·leetcode