pointer和reference(指针和引用)的区别:* &

1.reference一定得代表某个对象,即reference必须有初值;而point没有这种要求,因此它可以有null pointers。即:
pointer可以为空,但是reference 不能为空。

  • 如果你的变量可能为空,那么你应该将其设计为pointer而不是refrence。反之,如果你的变量不能取空值,那么你应该将其设计为reference。
  • reference既然不能为空,也就必须在定义的时候,它就必须被给予一个合理的值。而指针可以为空。
int a = 10;
int *p;         //合法
int& r;         //非法
int& r = a;     //合法

以下行为要避免:

           int *p = null; 
           int& r = *p;
  • 在reference和pointer都可以使用情况下,使用reference更安全。因为reference不能为空,所以在使用之前不需要判断其值是否为空。

2.没有所谓的null reference意味着references可能会比使用pointers更有效率,因为使用reference之前不需要测试其有效性。

3.pointer可以被重新赋值,指向另外一个对象,而reference却总是指向它最初获得的那个对象,类似于常量指针。
即:
pointer所指的对象可以改变,但是reference所指的对象始终不变(通过reference修改的值,最终都会修改reference所引用的那个对象的值)。

  • 如果你所设计的变量在不同时刻需要指向不同的对象,那么需要将其设计为pointer。反之,可以设计为reference因为使用更安全。
string s1("hello");
string s2("world");
string& rString = s1;   //rString引用的是s1对象
string *pString = &s2;  //pString指向s2对象
rString = s2;         //此处只是将s1的值修改为world,即将s2的值赋给s1;
pString = &s1;        //此处pString将指向s1对象    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓯江畔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值