2009-01-06 70 views
4
ClassA* pa = NULL; 
ClassA* pb = NULL; 
assignObject(ClassA* pa,ClassB* pb) 
{ 
pa = new ClassA; 
pb = new ClassB; 
} 

會是怎樣的PA值,PB執行功能作爲指針傳遞的函數內部賦值?

編輯 如何通過爲指針後返回,如果PA,PB爲NULL

回答

8

正如在其他答案中指出的那樣 - 在調用後兩者仍然爲NULL。不過,也有這個問題,有兩種可能的解決方案:

1)引用

void assignObject(ClassA*& pa, ClassB*& pb) 
{ 
    pa = new ClassA; 
    pb = new ClassB; 
} 

ClassA* pa = NULL; 
ClassA* pb = NULL; 
assignObject(pa, pb); // both will be assigned as expected. 

2)指針

void assignObject(ClassA** pa, ClassB** pb) 
{ 
    assert(pa != NULL); assert(pb != NULL); 
    *pa = new ClassA; 
    *pb = new ClassB; 
} 
ClassA* pa = NULL; 
ClassA* pb = NULL; 
assignObject(&pa, &pb); // both will be assigned as expected. 

大多數程序員可能會選擇引用,因爲那時他們不」 t需要斷言任何東西(引用永遠不能爲NULL)。

0

NULL,因爲你傳遞按價值指針。

+0

如何通過指針 – yesraaj 2009-01-06 11:24:09

+0

也許你應該改變這個問題......? – Roddy 2009-01-06 11:31:37

2
ClassA* pa = NULL; 
ClassA* pb = NULL; 

void assignObject(ClassA* &pa,ClassB* &pb) 
{ 
    pa = new ClassA; 
    pb = new ClassB; 
} 

或者:

ClassA* pa = NULL; 
ClassA* pb = NULL; 

void assignObject(ClassA** pa,ClassB** pb) 
{ 
    *pa = new ClassA; 
    *pb = new ClassB; 
} 
3

他們將是空的,因爲你是按值傳遞它們。如果你想通過引用傳遞,你可以這樣做:

ClassA* pa = NULL; 
ClassA* pb = NULL; 
assignObject(ClassA*& pa, ClassB*& pb) 
{ 
    pa = new ClassA; 
    pb = new ClassB; 
} 

注意,我不知道你想用全局變量來完成的任務。在這個例子中它們從來沒有用過,因爲局部變量(函數參數)隱藏了它們。

我想你還需要爲你的函數聲明一個返回值類型,以使它成爲有效的C++。