c++学习笔记十八——指针与引用

指针与引用
指针以及引用有很多相似的地方,使用他们作为形参,都可以修改主调函数变量从而达到值的双向传递。都可以避免复制值的发生从而减少调用数据的开销。
引用
之前在介绍引用时将其介绍为其他变量的别名,但是对一个确定的引用来说,他可能在不同时刻表示不同变量的别名,因此,要在内存中为引用分贝空间来标识它所引用的变量,在程序运行时,变量只能依靠地址来区别,因此,只有通过储存被引用变量的地址,在运行时才能准确定位被引用的变量。在运行时引用所占的内存空间中。引用本身所占的内存空间中,储存的就是被引用变量的地址,这与指针有着相似的性质。
指针
指针是C语言本身就有的一个特性,C++在继承了C语言指针的同时,同时引进了引用。指针储存的是地址,这一点毋庸置疑,而引用是一种较高层的概念——变量的别名,把地址这一概念隐藏起来了。但是在实际运行过程中还是不得不借助地址,所以二者在本质上是相同的。
指针与引用的区别
指针与引用的最大区别在于,指针可以多次更改被指向的对象,但是引用在初始化后就不能在更改,因此,可以将引用看成一个常量指针。

int x=1;
int *p1=&x;//初始化指针指向的变量
int &p2=x;//x的别名p2

从以上的叙述中我们可以知道,引用能够实现的功能指针全部能够实现,引用只不过就是一个常量指针而已。那么为什么还要引入”引用“这一概念呢?
这是因为指针虽然功能强大,使用灵活,但是当希望函数的形参是指针时,主调函数会使用 “&”,而被调函数则为“*”,程序会显得很繁琐,而且在这类用途之下,指针的算数运算尽管不需要使用,但是如果被不慎误用,则会造成不必要的麻烦,如果要避免这一情况,可能要将指针设定为常量,但是这样参数会显得很麻烦。
具体参考如下

#include<iostream>
#include<string>
using namespace std;
void swap(int * const p1,int * const p2)
{
	int p3 ;
	p3 = *p1;
	*p1 = *p2;
	*p2 = p3;
}
void swap1(int &a, int &b)
{

	int c = a;
	 a = b;
	 b = c;
}
int main()
{
	int a1 = 1;
	int a2 = 2;
	swap(&a1,&a2);
	cout << a1 << "\n" << a2 << endl;
	swap1(a1, a2);
	cout << a1 << "\n" << a2 << endl;
}

我们可以看到,使用引用在调用形参时更加简洁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值