2009-01-06 64 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++。