函数不会改变指针的值

时间:2012-12-14 02:45:22

标签: c++ function pointers

我认为代码不言自明:

MyClass* pointer = NULL;
changePointer( pointer );
if (pointer == NULL) 
{
   // it's entering here :(
}



    void changePointer( MyClass* p)
    {
        MyClass* temp = NULL;
        for (int i = 0; i < myContainer.size(); ++i) 
        {
            p = &(myContainer[i]);

            if (p == NULL) 
            {
                 // it's not entering here :)
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

如果要更改指针在调用函数中指向的内容,您希望通过引用传递指针

void changePointer(MyClass*& p)

您无需更改 调用该功能的方式,或如何 p使用该功能。现在,如果您在函数内部更改p的目标,那么它也会在原始变量中更改

这是你要问的吗?

答案 1 :(得分:3)

指针正在按值传递,而不是通过引用传递,因此无法更改原始变量。您需要将函数签名更改为:

void changePointer(MyClass** p)

...并传递一个指向指针的指针:

changePointer(&pointer);

您还需要在函数体中进行一些相应的更改。