我可以修改作为参数传递的指针的目标吗?

时间:2013-04-29 10:17:28

标签: c++ function pointers reference scope

函数是否可以更改作为参数传递的指针的目标,以使效果保持在函数外部?

void load(type *parameter)
{
    delete parameter;
    parameter = new type("second");
}

type *pointer = new type("first");
load(pointer);

在这个最小的例子中,pointer会指向第二个分配对象吗?如果没有,我怎么能得到这种行为?

更新:为了澄清我的意图,这里是我将使用的代码,如果参数将是普通类型而不是指针。在这种情况下,我只会使用引用。

void load(type &parameter)
{
    parameter = type("second");
}

type variable("first");
load(&variable);

这很简单,但我尝试用指针做同样的事情。

3 个答案:

答案 0 :(得分:9)

没有

在这种情况下,

parameter会获得pointer值的副本。所以这是一个新的变量。您对其所做的任何更改仅在功能范围内可见。 pointer保持不变。

您必须通过引用传递the pointer

void load(type *& parameter)
                ^
{

答案 1 :(得分:3)

您需要通过引用传递指针:

void load(type *&parameter);

参见例如http://www.cprogramming.com/tutorial/references.html

答案 2 :(得分:0)

或者,您可以使用double指针。

void load(type** parameter)
{
    delete *parameter;
    *parameter = new type("second");
}

type *pointer = new type("first");
load(&pointer);

但是,由于您使用的是cpp,因此可以使用references