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

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

执行该函数的值pa和之后是什么?pb

如果 pa,pb 为 NULL,编辑如何作为指针传递是返回

4

4 回答 4

14

正如其他答案中所指出的 - 通话后两者仍然为 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.

大多数程序员可能会选择引用,因为这样他们就不需要断言任何东西(引用永远不能为 NULL)。

于 2009-01-06T11:35:28.710 回答
4

它们将为 NULL,因为您按值传递它们。如果你想通过引用传递它,你可以这样做:

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

请注意,我不确定您要使用全局变量来完成什么。在此示例中从未使用它们,因为局部变量(函数参数)隐藏了它们。

我认为您还需要为您的函数声明一个返回值类型,以使其成为有效的 C++。

于 2009-01-06T11:26:31.460 回答
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;
}
于 2009-01-06T11:25:43.940 回答
0

NULL,因为您按值传递指针。

于 2009-01-06T11:23:31.090 回答