c++ 引用

引用

引用是c++在c指针的基础上更新改进的一个概念,引用在使用的时候比指针方便,并且不需要考虑类似空指针的问题。不过不能把它等同于指针,这两者在编程中的分工还是比较明确的。


引用的使用

引用的本质是一个变量的别名,因此它一定要与某个变量绑定。就像是我们给小明的别称叫阿明,那么今后任何时候提及阿明都自动与小明有关,而且也不会在指代别人,而阿明这个名字也不会独立于任何人存在的,我们不可能提到阿明这个名字却不知道我们在说谁。

引用的使用

#include<iostream>
using namespace std;

//引用的使用

int main()
{
	int num = 3 ;
	int &numRef = num ;
	cout << "num是" << num << ",numRef是" << numRef << endl;
	numRef = 4;
	cout << "num是" << num << ",numRef是" << numRef << endl;
	return 0 ;
}

运行结果
在这里插入图片描述
通过示例可以看到,引用和指针在语法上的区别就是在创建的时候,把“ * ”换成了“ & ”。这里我们把numRef与num绑定,也就是说numRef就是num的别名,因此numRef与num相同,而当我们修改numRef的时候,实际上也在修改num,这在运行的结果可以体现出来。如果不给numRef初始化,编译器将会报错。

此外,在使用引用的时候不需要像指针那样考虑解引用和取地址的操作,使用引用就和使用变量一样直观。示例中的引用的使用方式对程序的好处十分有限,在一般情况下引用都是用于函数的参数传递。


引用与指针的区别

引用与指针有如下两点区别:
<1> 引用必须初始化为某个变量的别名,而指针却可以为空。
<2> 修改引用时修改的是引用所代表的原变量的值,而修改指针时则是修改指针所指向的地址。

两点中,第一点很容易理解,下面用一个示例讲解第二点:
引用与指针的比较

#include<iostream>
using namespace std;

//引用与指针的比较

int main()
{
	int num1 = 1;
	int num2 = 2;
	int &numRef = num1;
	int *numPtr = &num1;

	cout << "numPtr指向" << *numPtr << endl;
	numPtr = &num2;
	cout << "修改后,numPtr指向" << *numPtr << endl;

	cout << "numRef代指" << numRef << endl;
	numRef = num2;
	cout << "修改后,numRef代指" << numRef << endl;
	cout << "num1现在是" << num1 << ",num2现在是" << num2 << endl;
	return 0 ;
}

运行结果
在这里插入图片描述
可以看到,指针numRef一开始指向num1,而在赋值后指向了num2.引用numref一开始也初始化为num1 别名,当我们尝试将num2赋值给它时,看起来像让numRef代指num2,然而实际上却是将num1 的值修改为了2.对于引用这种不直观行为,其实只要记住一点:引用就是变量的别名,因此修改引用就是修改原有变量而已。


const引用

const引用是const变量的别名。由于const变量的值不能随意修改,而修改普通引用将会导致原变量的值改动,因此,我们也需要一种专门用于const变量的引用。

#include<iostream>
using namespace std;
//const引用
int main()
{
		const float pi = 3.14f;
		const float &piConstRef = pi;
		float &piRef = pi;
		return 0;
}
		

编译该程序会导致错误,非const引用是不能绑定到const变量的,这是因为非const引用可以随意修改,而如果使用const引用,无论是修改pi 还是修改const引用 piConstRef,都会导致编译错误。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值