到底是使用引用还是指针?

指针和引用各有用途,它们的区别在于:

(1)非空区别。任何情况下都不能使用指向空值的引用,即引用必须指向一个某个对象;而指针可以指空。

(2)合法性区别。使用引用之前不用检查它的合法性;指针则应该总是被测试,防止其为空。

(3)可修改区别。指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

如: 

 int a=6;
 int b=666;
 int *p=new int;
 int &r=a; //引用必须初始化
 *p=a;
 *p=b;

(4)应用区别:

以下情况下使用指针:一是考虑到存在不指向任何对象的可能,二是你需要能够在不同的时刻指向不同的对象。

如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么就应该使用引用。

 

例子:

代码1:

#include <iostream>
using namespace std;
int main()
{
 // int &r=new int; //报错,因为new int返回的是一个指针,而int &r返回的是一个引用
 int *&r=new int; //等价于:int *p=new int; int &r=*p;

r=3;
 return 0;
}

 //若机器运行不正常的情况下(即机器的虚拟内存太小),无法创建新空间的情况下,那么new int会返回一个空指针。而引用不能为空,这种情况下使用int *&r=new int会导致一个无用的别名。而*读取一个无用的别名,并给其复制,将导致系统崩溃。

 

改进代码1:

#include <iostream>
using namespace std;
int main()
{

 //解决方案:要先判断指针不为空
 int *p=new int;
 if(p!=NULL)
 {
  int &r=*p;
  r=3;
 }
 return 0;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值