服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++浅析引用的定义与使用

C++浅析引用的定义与使用

2023-02-24 15:46幻荼 C/C++

引用是C++一个很重要的特性,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价,这篇文章主要给大家总结介绍了C++中引用的相关知识点,需要的朋友可以参考下

解释引用

首先我们先来看一个引用的例子

int main()
{
	int a = 10;
	int& Bin = a;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

C++浅析引用的定义与使用

对于一个int型函数a,我们对a进行了引用,引用的新int函数叫Bin。

由他们是同一个地址可以知道,引用其实就是对同一个地址的函数,换了一个新的叫法。

相当于《水浒传》中,李逵在江湖上人称黑旋风

那么这里int a就相当于李逵,而int&Bin就相当于黑旋风。

你使用李逵和黑旋风,他都会答应,这也就相当于起外号

如下:

int main()
{
	int a = 10;
	int& Bin = a;
	Bin += 10;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

C++浅析引用的定义与使用

可以看到我们这里是对Bin进行操作,但是a的值也改变了。

同时我们也可以多个引用,可以给引用再引用(给外号再起外号)

int main()
{
	int a = 10;
	int& Bin = a;
	int& Tian = a;
	int& Wei = Bin;
	cout << a << endl;
	cout << Bin << endl;
	cout << Tian << endl;
	cout << Wei << endl;
	cout << &a << endl;
	cout << &Bin << endl;
	cout << &Tian << endl;
	cout << &Wei << endl;
}

C++浅析引用的定义与使用

可以看到值和地址还是相同。

注意:引用必须同等类型

int a=10;
double&b=a;
这是错误的

 

引用的作用

非常经典的引用就是交换两个数的值。

这是我们c语言的交换,这里形参不改变实参

void test1(int a,int b)//a,b不改变,因为a,b的生命周期只在swap函数内,结束swap后a,b就消失,不改变实参
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test1(a, b);
	cout << a << " " << b << endl;
}

然后我们学习了指针后,知道能直接交换地址

void test2(int* a, int *b)//使用指针,交换地址实现数字变换
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test2(&a,&b);
	cout << a << " " << b << endl;
}

然后这是引用,引用是实参的外号,我们这里修改,是对实参的直接修改

void test3(int& a, int& b)//使用引用,a,b是实参的别名,相当于对实参的调用
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test3(a, b);
	cout << a << " " << b << endl;
}

注意:我们这里的引用都必须是合法的空间

Int &a = 10;//10并不是一个空间,只是一个数,这是错误的引用

 

关于局部变量的引用

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

按照常理,这里test2中的b出了test2应该作为局部变量被回收,但是

C++浅析引用的定义与使用

我们依然能得到正确答案,这是因为编译器有对这种情况进行优化,但是仅限一次

如果我们这样

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

多调用几次打印

C++浅析引用的定义与使用

就会发现除了第一次是正常的,其余都是乱码。

注:如果实在是要这样搞,就加上静态变量Static。

int& test2()
{
	static int b = 10;
	return b;
}
void test1()
{
	int& a = test2();
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
}
int main()
{
	test1();
}

C++浅析引用的定义与使用

到此这篇关于C++浅析引用的定义与使用的文章就介绍到这了,更多相关C++引用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_62718027/article/details/124561766

延伸 · 阅读

精彩推荐
  • C/C++C++实现二维图形的打印

    C++实现二维图形的打印

    大家好,本篇文章主要讲的是C++实现二维图形的打印,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下...

    小李同学296112022-09-16
  • C/C++如何利用C语言实现最简单的HTTP服务器详解

    如何利用C语言实现最简单的HTTP服务器详解

    这篇文章主要给大家介绍了关于如何利用C语言实现最简单的HTTP服务器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定...

    作程6582021-08-05
  • C/C++详解C++中赋值和输入输出语句的用法

    详解C++中赋值和输入输出语句的用法

    这篇文章主要介绍了详解C++中赋值和输入输出语句的用法,是C++入门学习中的基础知识,需要的朋友可以参考下...

    C++教程网6692021-03-12
  • C/C++C++中的运算符和表达式

    C++中的运算符和表达式

    这篇文章主要介绍了C++中的运算符和表达式,学习使用表达式,对数据类型进行处理.详细介绍内容需要的小伙伴可以参考下面文章相关内容...

    机器学习入坑者8892022-10-14
  • C/C++C语言自定义类型的保姆级讲解

    C语言自定义类型的保姆级讲解

    这篇文章主要给大家介绍了关于C语言自定义类型的保姆级讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    teacher dsma5002021-10-27
  • C/C++浅谈Windows系统下C语言编程中Glib库的使用

    浅谈Windows系统下C语言编程中Glib库的使用

    这篇文章主要介绍了Windows系统下C语言编程中Glib库的使用,Glib库在多线程编程中经常可以用到,需要的朋友可以参考下...

    C语言教程网6732021-03-25
  • C/C++C语言矩阵连乘 (动态规划)详解

    C语言矩阵连乘 (动态规划)详解

    这篇文章主要介绍了C语言矩阵连乘 (动态规划)详解的相关资料,需要的朋友可以参考下...

    super_yc10082021-05-12
  • C/C++vc提示unexpected end of file found的原因分析

    vc提示unexpected end of file found的原因分析

    这篇文章主要介绍了vc提示unexpected end of file found的原因分析,给出了几点常见错误原因的分析,需要的朋友可以参考下...

    好人一个9642021-02-26