c++中 *& 和 **& 符号作用说明

         在c++中,尤其是函数调用或者函数返回的时候,通常会遇到调用 引用(&) 或者返回 引用(&) 对象,更甚者函数调用 **(指针的指针),但是“*&”和“**&”却很少看到,到底代表什么意思呢?下面简单介绍一下。

        先从基本的开始:

         1、函数返回引用及函数调用引用

          引用简单来看,就是一个变量的别名,所以和原来调用函数的实参没有什么区别,就是同体(一样的)。

         

ostream &operator<<(ostream &output, const AAA &aaa)  
{  
     output << aaa.x << ' ' << aaa.y << ' ' << aaa.z << endl;  
     return output;  
} 
        从上面函数调用到函数返回,output始终都是一个。

        2、函数传递参数为指针

        一般的情况,在上一篇博文中有详细的介绍:http://blog.csdn.net/richerg85/article/details/14450183,这里不再赘述。

       函数传参“**”情况,上文也介绍:

     

    void my_malloc(void** p, int size)  
    {  
        *p = malloc(sizeof(int)*size);  
    }  
    int main()  
    {  
        int *a;  
        my_malloc(&a , 10);  
        return 1;  
    }  
      通过这种调用可以返回修改的对象值。

   

     那*& 和 **& 符合分别又代表什么呢?

    例如int *&p;

    int **&p;

    其实这两个*& 和 **&是表示引用,*&表示指针的引用,**&表示指针的指针的引用。

    举例:

   

void foo(int*& x, int**& y) {
    // modifying x or y here will modify a or b in main
}

int main() {
    int val = 42;
    int *a  = &val;
    int **b = &a;

    foo(a, b);
    return 0;
}
 修改调用函数中的x和y,会直接影响到主函数中的a和b的值。因为他们是引用关系。


再说一点和标题不想关的,还是上篇文章提到的问题,这里再给个实例:

void pass_by_value(int* p)
{
    //Allocate memory for int and store the address in p
    p = new int;
}

void pass_by_reference(int*& p)
{
    p = new int;
}

int main()
{
    int* p1 = NULL;
    int* p2 = NULL;

    pass_by_value(p1); //p1 will still be NULL after this call
    pass_by_reference(p2); //p2 's value is changed to point to the newly allocate memory

    return 0;
}
好好领悟一下吧!

  • 17
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值