引用与指针&&指针引用与二级指针

文章讨论了C++中的引用和指针,指出引用作为变量的别名,底层实现基于指针,提供了一种更安全、更易读的替代方案。引用在函数参数中用于传递和修改值,避免了指针的解引用操作。同时,文章对比了指针引用和二级指针,展示了在某些情况下,指针引用能提高代码的可读性和实用性。
摘要由CSDN通过智能技术生成

说起引用,相信大家都会和指针联想到一起,确实!引用和指针存在千丝万缕的关系。引用,可以看作是一个已经定义变量的别名,俩者虽然看起来有点差异,但是引用呢,他的底层实现其实也是用指针实现的。使用引用是为了方便我们程序员的编码实现,有助于阅读代码,而不用使用更复杂的指针,它在某些方面的应用可以说是比指针更加的“得心应手”。

引用与指针

现在来看看引用的定义:首先需要定义一个int类型的变量a,然后再定义一个与a同为int类型的变量c,加上引用符号&,把变量c指向已经定义好的变量a,如下:

int a = 666;

int& c = a;
cout << "c:" << c << endl;//666

引用有一个非常经典的用法,就是用作函数的参数。如果我们需要在外部交换俩个数的值,且经过函数的处理后,外部的值也发生了交换。在这里需要说明的一点是,普通的函数执行完之后,栈空间被释放,函数内部的局部变量也随之被销毁,所以根本不可能把函数外部的变量改变。图示。

那有什么解决方法呢?这里给出2种方式,1,使用指针,2,使用引用。

使用指针和引用都能达到同样的效果,但是使用引用,给我们视觉上的感觉是不是更友好一点?只需要行参使用引用,下面的交换实现和原来普通的函数一样,非常便于理解。但是使用指针,还需要对指针进行解引(使用*),看起来更加的眼花缭乱。引用在某些场合确实是比指针更加的灵活,以及实用性,可读性也更高,引用作为其他变量的别名而存在,在某些场合(比如这里)替代指针却是让我们程序员感觉更友好亲切。

//方式一, 使用指针
void swap1(int* a, int* b){

	int tmp = *a;
	*a = *b;
	*b = tmp;
}


//方式二, 使用引用
void swap2(int& a, int& b){

	int tmp = a;
	a = b;
	b = tmp;
}

说完了指针与引用,我们再来说说指针引用与二级指针。

指针引用与二级指针

在古代,婚姻大事都是父母之命,媒妁之言,俩个结婚的人只有在结婚当天才会见面,所以在结婚前关于对方的信息,都是媒婆在传达,假如我们写一个函数,让媒婆把男方的年龄进行传达,我们写一个要把男方年龄信息传达的函数。

有2种方式。1,使用二级指针。2,使用指针引用

可以看到,使用指针引用是更方便的,不需要通过解引(使用*),就可以直接使用,因此在很多时候,使用二级指针的地方可以使用指针引用来替代,增强使用性与可读性.

#include<iostream>
#include<Windows.h>

using namespace std;

//方式1,使用二级指针
//传进来的是一个一级指针地址,所以必须要用二级指针来接
void boy_home1(int** meipo) {

	static int boy = 23;
	//解引得到一级指针,可指向一个地址
	*meipo = &boy;
}

//方式2,使用指针引用
//使用指针引用,使用起来更像是一个一级指针
void boy_home2(int*& meipo) {

	static int boy = 23;
	meipo = &boy;
}


int main(void) {
	int x = 666;
	int *p = &x;

	//定义指针变量的引用
	int* &q = p; 
	printf("*p: %d *q: %d\n", *p, *q);
	
	//定义一个指针
	int* meipo = NULL;
	boy_home1(&meipo);
	boy_home2(meipo);

	printf("boy: %d\n", *meipo);

	system("pause");
	return 0;
}

今天的分享就到这里了~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值