指针和引用的区别

本文详细探讨了C++中指针和引用的区别,包括它们的定义、使用场景、安全性。引用作为对象的别名,不能为空且初始化后不能改变指向,而指针可以为空并可改变指向。此外,还讲解了const修饰的引用和指针的差异,以及指针和引用在函数参数传递中的应用。
摘要由CSDN通过智能技术生成

前言

指针和引用在形式上很好区别,在C++中相比于指针我们更喜欢使用引用,但是它们的使用场景又极其类似,它们都能直接引用对象,对对象进行处理,那么究竟为什么会引入?什么时候使用指针?什么时候使用引用?这两者实在容易混淆,在此我详细介绍一下指针和引用。

指针和引用的定义

维基百科中这样解释

指针:

在计算机科学中,指针(英语:Pointer),是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个存储器地址,这个地址的值直接指向(points to)存在该地址的对象的值。

引用:

在C++编程语言中,引用是一种简单的引用数据类型,其功能不如从C继承的指针类型,但更安全。C++引用的称可能会引起混淆,因为在计算机科学中,引用是一种通用的概念数据类型,指针和C++引用是特定的引用数据类型实现。

但说了和没说差不多。下面用通俗易懂的话来给概述一下。

  • 指针

对于一个类型T,T*就是指向T的指针类型,也就是说T*类型的变量能够保存一个T类型变量的地址。

int main()
{
   
	int i = 1;
	int* p = &i;
	cout << "p = " << p << endl;
	cout << "i = " << i << endl;
	return 0;
}

关系如图:

image-20220518225702592

  • 引用

引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义:

image-20220518225708170

指针和引用的区别

首先,引用不可以为空,但指针可以为空。前面也说过了引用是对象的别名,那么能初始化引用的前提一定是被引用的对象存在,引用为空——对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化。因此如果你有一个变量是用于指向另一个对象,但是它可能为空,这时你应该使用指针;如果变量总是指向一个对象,并且这个变量一定不为空,这时你应该使用引用。如果定义一个引用变量,不初始化的话连编译都通不过(编译时错误):

int main()
{
   
	int i = 10;
	int* p;
	int& r;
	return 0;
}

报错:

“r”: 必须初始化引用

而声明指针并不需要初始化操作,即它可以不指向任何对象,也正因如此,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值