【发布时间】:2018-05-27 13:06:49
【问题描述】:
我正在做一些事情,导致我遇到类似于以下示例的情况。我希望 b 在 test() 之后指向 a。是否有可能,或者创建副本是唯一的解决方案?
谢谢。
void test(Object* a, Object* b)
{
std::cout << "test a: " << a << std::endl;
std::cout << "test b: " << b << std::endl;
b = a;
std::cout << "test b assigned: " << b << std::endl;
}
int main()
{
Object* a = new Object();
Object* b = nullptr;
test(a, b);
std::cout << "a: " << a << std::endl;
std::cout << "b: " << b << std::endl;
delete a;
delete b;
}
test a: 0x1aa8930
test b: 0
test b assigned: 0x1aa8930
a: 0x1aa8930
b: 0
【问题讨论】:
-
不幸的是你不能,因为你传递的是 b 的值,而不是它的引用(或指针),这是修改它所必需的。只有当函数接收到这些变量的地址时,变量才能被函数修改,并且只能通过指针(所以你有 Object**)或引用(Object* &)
-
除了 Paul:
void test(Object *a, Object *&b)也可以。 -
没有
void main()这样的东西 -
你想要一个双指针(指向指针的指针 -
**b)或对指针的引用。