ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}
执行函数
后pa,pb的值是多少EDIT 如果pa,pb为NULL
,如何传递as指针答案 0 :(得分:9)
正如其他答案所指出的那样 - 在通话后两者仍然是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)。
答案 1 :(得分:3)
它们将为NULL,因为您按值传递它们。如果你想通过引用传递它,你可以这样做:
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
pa = new ClassA;
pb = new ClassB;
}
注意,我不确定你要用全局变量完成什么。它们从未在本例中使用过,因为局部变量(函数参数)会隐藏它们。
我认为您还需要声明函数的返回值类型,以使其成为有效的C ++。
答案 2 :(得分: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 :(得分:0)
NULL,因为你是按值传递指针。