ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}
會是怎樣的PA值,PB執行功能作爲指針傳遞的函數內部賦值?
編輯 如何通過爲指針後返回,如果PA,PB爲NULL
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}
會是怎樣的PA值,PB執行功能作爲指針傳遞的函數內部賦值?
編輯 如何通過爲指針後返回,如果PA,PB爲NULL
正如在其他答案中指出的那樣 - 在調用後兩者仍然爲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)。
NULL,因爲你傳遞按價值指針。
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;
}
他們將是空的,因爲你是按值傳遞它們。如果你想通過引用傳遞,你可以這樣做:
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
pa = new ClassA;
pb = new ClassB;
}
注意,我不知道你想用全局變量來完成的任務。在這個例子中它們從來沒有用過,因爲局部變量(函數參數)隱藏了它們。
我想你還需要爲你的函數聲明一個返回值類型,以使它成爲有效的C++。
如何通過指針 – yesraaj 2009-01-06 11:24:09
也許你應該改變這個問題......? – Roddy 2009-01-06 11:31:37