我得到了一个(C ++)代码,其中使用
传递数组void fun(int *& name){...}
但背后的想法是什么?我想这意味着"一系列参考文献"但是当你只是将指针传递给第一个可以正常的元素时,它不会吗?那么这样做的动机是什么?
答案 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
可能被修改。