为什么将数组作为“int *& name”传递?

时间:2014-08-29 07:02:55

标签: c++ arrays

我得到了一个(C ++)代码,其中使用

传递数组
void fun(int *& name){...}

但背后的想法是什么?我想这意味着"一系列参考文献"但是当你只是将指针传递给第一个可以正常的元素时,它不会吗?那么这样做的动机是什么?

2 个答案:

答案 0 :(得分:5)

该函数接收对指针的引用。这意味着该函数不仅可以修改int指向的name,而且还可以看到函数调用中对指针本身的更改也是可见的外部。

示例:

#include <iostream>

int* allocate()
{
    return new int();
}

void destroy(int*& ptr)
{
    delete ptr;
    ptr = NULL;
}

int
main(int argc, char *argv[])
{
    int* foo = allocate();

    std::cout << foo << std::endl;

    destroy(foo);

    std::cout << foo << std::endl;

    return 0;
}

输出是:

0x82dc008
0

答案 1 :(得分:2)

这意味着该函数可以修改调用者中指针的值。

myName* foo; /* ToDo - initialise foo in some way*/
fun(foo);
/* foo might now point to something else*/

我认为这是一种反模式。原因是阅读代码的人不会以这种方式修改期望 foo,因为调用语法与更正常的函数void anotherFun(int * name){...}无法区分。

此类代码的稳定性可能会受到影响。因此,我建议您使用void fun(int ** name){...}。然后调用语法变为fun(&foo),向函数用户指示foo可能被修改。