指针引用的用法

指针引用就是一个指针的引用,看下面例1:

 

int a = 10;

int b = 20;

void swap(int& lhs, int& rhs)

{

      int tmp = lhs;

      lhs = rhs;

      rhs = tmp;

swap(a, b);

 

上面的程序可以成功交换两个int值,但是如果形参传的是int而非其引用的话则不会交换2个int值,因为形参非引用的情况下,编译器会复制a,b然后把a,b的拷贝传到swap函数中,交换的只是a,b的拷贝而已,所以失败。但是传引用则可以成功。

 

 

例2:

 

    /* 查找机车
     * @name:   机车名字
     * @crg:    被查找到的机车
     * @return: 未找到机车返回false;否则返回true
    */
    bool find(LPCTSTR name, Carriage* &crg);

 


bool CRG_Repository::find(LPCTSTR name, Carriage *&crg)
{
   
    for (size_t i=0;i<crgs_.size();i++)
    {
        if (name==crgs_[i]->name())
        {
            crg=crgs_[i];
            return true;
        }
    }

    return true;
}

 

上面程序根据name查找机车,其中机车存放在一个容器中:std::deque<Carriage *> crgs_

并返回找到的这个机车的指针。

 

如果find函数的第二个参数不传指针的引用而传指针的话,可能如下所示:

Carriage* found;

CRG_Repository crep;

crep.find("123", found);

这样的调用不会改变found这个指针的值,find函数仅仅改变了found的拷贝而已,所以失败。

当传指针引用的时候则会成功,因为:传引用编译器不会拷贝一个found传到find函数中去,而是直接传递found,在find函数内部的修改就是found本身,而不是它的拷贝;修改完后,found的值变了,当然可以成功。

 

当然这个find函数也可以这样

Carriage* find(LPCTSTR name);

 

所以传指针引用的目的是要修改这个指针,调用函数之后修改这个指针的值,获得这个修改后的值以备他用。

 

 

总结一下:传引用的目的一般是为了修改这个传递的是引用的参数,然后返回这个值(以后程序中会用到);或者是不让编译器对参数进行拷贝,提高效率。

 



转载于:https://www.cnblogs.com/kex1n/archive/2009/05/06/2286546.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值