C++ 引用

本文详细介绍了C++中的引用,包括其作为变量别名的特性,初始化与不可重新绑定的规则。通过示例代码展示了引用在函数参数和返回值中的作用,强调了引用的本质是‘指针常量’。此外,还讨论了常量引用在防止函数内部参数修改上的用途。
摘要由CSDN通过智能技术生成

前面说了内存四区和new操作符,现在来讲下引用

1.给一个简单的定义   引用就是给变量取别名

int a  =100;

int &b= a;

a  和 b   是同一块内存

引用要注意两个问题

1.引用必须初始化

2.引用不能更

 下面是测试代码:

#include <iostream>
using namespace std;

int main()
{
	int a = 100;
	int& b = a;  //引用必须初始化
	cout << "a=" << a << "  b=" << b << endl;
	int c = 200;
	//int& b = c;//错误,引用不可以更改
	b = c;//这不是更改引用,而是给变量b赋值
	cout << "a=" << a << "  b=" << b <<" c=" <<c<< endl;
}

运行结果:

 2.引用作函数参数和函数返回值

之前大家应该都学过   交换两个变量值的方法

变量值改变的意义并不是值本身的问题,而是地址的问题

所以

swap(int *a,int *b)能够交换主函数传入两个变量的值

swap  (int a,int b)不能交换,因为传进来的是两个值本身,swap函数中局部变量a,b的值会被修改,但是主函数中的则不会

了解了引用   可以用第三种方法    引用传递

swap(int& a,int& b)  因为是取别名,当然也是可以为本身的   相当于int& a=a;所以主函数中的a与swap函数里面的a,主函数中的b与swap函数里面的b共用同一块内存,swap中a与b的值交换了

当然主函数中的a  b也交换了

代码里面就不重名了,重名是可以的大家可以去试试

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}


int main()
{
    int x=100;
    int y=200;
    swap(x,y);
    cout<<x<<" "<<y<<endl;
}

200  100

 引用是可以做函数返回值的

1.不要返回局部变量

2.函数调用可以作左值

之前讲过,局部变量是在栈区的  会在函数结束后释放

所以返回局部变量用其他变量接受的时候,第一次可能会被编译器保留,但是之后就会被随机重置,就不试了,大家可以去试试

第二

函数调用是可以作左值的

 下面代码段输出为100000

#include <iostream>
using namespace std;
int& test()
{
	int a = 100;
	return a;
}
int main()
{
	int& b = test();//返回的是引用,用引用接收
	test() = 1000000;
	cout << b<< endl;
}

3.引用的本质和常量引用

引用的本质:

        我们可以把引用看作是取别名,但是在C++中,引用是有更深一步的操作的

        引用的本质的  指针常量

        指针常量和常量指针相信大家都明白

        指针常量是指针的指向不可变  指向空间的值可以被修改   如 int *const  b=&a;

        常量指针指针的指向可以改变  但是指向的空间的值不可以修改 如 int const *b=&a;

        这里我们就可以解释开篇提出要注意的两个问题了

1.引用必须初始化     指针必须初始化,不然就是个野指针,是很危险的

2.引用不能更            int *const  b=&a;  指针常量的指向是不可以变的

int  &b=a  -----------  int *constb=&a

b=100;    -------------*b=100;

这是引用的实质,我们用的时候不需要去管这些,只需要知道用法就行

 最后  一个  常量引用

这个的应用场景主要是作函数参数,防止形参被修改

比如说我我们只想打印传入变量的值 但不修改 

#include <iostream>
using namespace std;

void  printnum( const int & num)
{
	cout << num << endl;
}
int main()
{
    int  a=10;
	printnum(a);
}

如果我们直接int &num  那么我们修改num的值则会改变a;

加上const  变为只读 不能修改  从而防止误操作

分享到这里 谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值