栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 引用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 引用

目录

1. 传引用返回的应用

2. 传值返回和传引用返回比较

2.1  效率比较:传引用返回效率更高

2.2  引用权限

3. 引用和指针的区别


1. 传引用返回的应用
  • 做参数——输出型参数
  • 做返回值——修改返回对象
#include 
using namespace std;

typedef struct SL
{
	int* data;
	int size;
	int capacity;
}SL;

void InitSL(SL& at, int capacity = 4)	//传引用参数,可用指针代替
{
	at.data = (int*)malloc(sizeof(int) * capacity);
	at.size = 0;
	at.capacity = capacity;
}

void SLPushBack(SL& at, int x)
{
	at.data[at.size] = x;
	at.size++;
}

void SLPrint(SL& at)
{
	for (int i = 0; i < at.size; i++)
	{
		cout << at.data[i] << " ";
	}
	cout << endl;
}

int& SLAt(SL& at, int pos)	//传引用返回,指针无法代替
{
	return at.data[pos];
}

int main()
{
	SL at;
	InitSL(at);

	for (int i = 0; i < at.capacity; i++)
	{
		SLPushBack(at, i);
	}
	SLPrint(at);    // 0 1 2 3

	for (int i = 0; i < at.size; i++)
	{
		SLAt(at, i)++;
	}
	SLPrint(at);    // 1 2 3 4

	SLAt(at, 0) = 10;
	SLPrint(at);    // 10 2 3 4

	return 0;
}

2. 传值返回和传引用返回比较

2.1  效率比较:传引用返回效率更高
#include 
#include 
using namespace std;

struct A
{
	int a[10000];
};

A a = { 0 };

A TestFun1()
{
	return a;
}

A& TestFun2()
{
	return a;
}

void TestReturnByRefOrValue()
{
	size_t begin1 = clock();
	for (size_t i = 0; i < 10000; i++)
	{
		TestFun1();
	}
	size_t end1 = clock();

	size_t begin2 = clock();
	for (size_t i = 0; i < 10000; i++)
	{
		TestFun2();
	}
	size_t end2 = clock();

	cout << "TestFun1 time: " << end1 - begin1 << endl;
	cout << "TestFun2 time: " << end2 - begin2 << endl;
}

int main()
{
	TestReturnByRefOrValue();
	return 0;
}

2.2  引用权限
#include 
using namespace std;

int main()
{
	//权限平移
	int a = 10;
	int& b = a;

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;

	const int c = 10;
	//int& d = c;		//权限不能放大
	const int& d = c;

	//权限缩小
	int e = 10;
	const int& f = e;

	int ii = 10;
	double jj = ii;			//通过临时变量进行类型转换
	//double& jj = ii;		//临时变量具有常性
	const double& jj = ii;	//权限平移

	return 0;
}

3. 引用和指针的区别
  • 引用必须初始化,指针不一定初始化;
  • 引用不能为空,指针可为空;
  • 引用在初始化一个实体后,不能再引用其它实体,指针可以任意改变指向的同类型对象;
  • 引用不开辟空间,大小为引用对象类型的大小,指针为地址所占空间;
  • 引用自加1即引用对象的实体自加1,指针自加1即向后偏移一个类型的大小;
  • 不存在多级引用,存在多级指针;
  • 引用比指针更安全;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号