What is a reference-to-pointer?

后端 未结 2 1437
难免孤独
难免孤独 2020-11-29 11:47

I recently saw a function that is being declared as:

void func(type* ¶m);

I already know the difference between type* param

2条回答
  •  -上瘾入骨i
    2020-11-29 12:11

    Let's compare all three options:

    • void func(type* param); // 'param' is a 'type*' variable
    • void func(type& param); // 'param' is a reference to a 'type' variable
    • void func(type*& param); // 'param' is a reference to a 'type*' variable

    void func(type* param)
    {
        type x;
        ...
        param = &x;
        // Argument 'param' is regarded as a local variable in this function,
        // so setting 'param = ...' will have no effect outside this function
    }
    

    Of course, if you do *param = ..., then it will effect the contents of the memory pointed by param. And you can also do param[5] = ... for example, and effect other areas within that memory space.


    void func(type& param)
    {
        type x;
        ...
        param = x;
        // Argument 'param' is regarded as a reference to a variable outside this
        // function, so setting 'param = ...' will effect the referenced variable
    }
    

    Here, you will only change the referenced variable itself, so it's safer than declaring the function as void func(type* param), and then pass the address of type param by calling func(¶m).


    void func(type*& param)
    {
        type x;
        ...
        param = &x;
        // Argument 'param' is regarded as a reference to a variable outside this
        // function, so setting 'param = ...' will effect the referenced variable
    }
    

    This is similar to declaring the function as void func(type** param), and then pass the address of type* param by calling func(¶m), but again, it is safer for the same reason mentioned above.


提交回复
热议问题