2

コードは自明だと思います:

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 :)
            }
        }
    }
4

2 に答える 2

3

呼び出し元関数でポインターが指すものを変更する場合は、参照によってポインターを渡します。

void changePointer(MyClass*& p)

関数の呼び出し方法や関数での使用 方法を変更する必要はありpません。p関数内のターゲットを変更すると、元の変数でも変更されます。

これはあなたが求めているものですか?

于 2012-12-14T02:47:41.200 に答える
3

ポインターは参照ではなく値によって渡されるため、元の変数を変更することはできません。関数のシグネチャを次のように変更する必要があります。

void changePointer(MyClass** p)

...そしてポインタにポインタを渡します:

changePointer(&pointer);

関数の本体にも対応する変更を加える必要があります。

于 2012-12-14T02:48:34.227 に答える