2017-08-04 24 views
-4

下面是我正在處理的代碼的簡化示例。有一個函數將類A指針作爲參數。我想傳遞一個已經初始化爲nullptr的指針。沒有初始化它到一些垃圾臨時值第一,是否有可能通過nullptr?如何傳遞nullptr?

class A 
{ 
    // stuff 
}; 

class B 
{ 
public: 
    A* pA1; 
    A objA; 
    std::vector<A*> vecB; 
    B() : pA1 (nullptr) { vecB.push_back(&objA); } 
}; 

void function(A* p); 

A* pA2; 

int main() 
{ 
    B objB; 
    pA2 = objB.vecB[0]; 
    function(objB.pA1); 

    return 0; 
} 

void function(A* p) 
{ 
    p = pA2; 
} 
+0

這不是我清楚你試圖在你的程序做。 –

+0

函數的要點在於:\t objB.pA1 = pA2 –

+1

請注意,函數定義中的'p'是它自己的指針,它是從你傳遞的參數的* copy *初始化的。所以分配它只會在'function'內產生效果,對其他指針對象沒有影響。如果你想修改另一個指針,你需要像'void function(A *&p)'這樣的東西。 – aschepler

回答

3

在評論,你說:

功能的關鍵是要做到這一點:objB.pA1 = pA2

我認爲你需要做的是通過一個什麼引用指針,而不是按值傳遞指針。使用方法:

void function(A*& p) // The argument type needs to be "A* &", not "A*" 
{ 
    // Now, the change will be visible in the calling program. 
    p = pA2; 
} 
2

是的。任何原始指針類型都可以分配,因此用nullptr值進行初始化。例如:

static A* pA2 = nullptr; 
+0

我傳遞的指針已經初始化爲nullptr。 –

0

aschepter給了我一個評論的答案,非常感謝。

void function(A* p) 

應該

void function(A*& p)