我想将指针更改为指向的位置,但不成功 这就是我所拥有的:
class Test {
public:
Test() {};
~Test(){};
int foo;
};
void ToPointer(Test *tst)
{
Test* t1 = new Test();
t1->foo = 111222;
tst = t1;
}
Test *t2 = new Test();
t2->foo = 2;
ToPointer(t2);
int fff = t2->foo;
fff的结果仍为2
我希望t2指向t1或列表复制其所有值
在这里我只是用foo简化它,但在现实生活中,对象要复杂得多
我不使用什么引用指针(*&)
答案 0 :(得分:2)
当您将t2传递给ToPointer(Test * tst)时,正在发生的事情是ToPointer()正在制作该指针的本地副本。然后你将tst分配给t1,但是所做的就是分配那个本地副本。在主要的一个仍将坐在那里未受影响。当函数返回时,ToPointer中的本地副本将会死亡。你可以做很多事情,比如将指针作为指针指向Test **,或者引用指针Test *&,或者像user64322表示,返回一个指针,或者返回一个引用指向一个指针对于指针,选择是无限的。
答案 1 :(得分:1)
您的代码的问题是
假设T2指针在
0x1000
指向0X2000 和tsk指针
0x1010 also pointing to 0x2000
现在t1指针位于
0x3000
and pointong at let say
0x4000
现在你已经完成了tsk = t1
表示tsk将指向0x4000
并记住,t2仍为0x1000,指向0x2000
其中一个解决方案是 返回t1
Test *ToPointer()
{
Test* t1 = new Test();
t1->foo = 111222;
return t1;
}
int main()
{
Test *t2 = new Test();
t2->foo = 2;
t2 = ToPointer();
int fff = t2->foo;
std::cout<<fff;
}
答案 2 :(得分:1)
由于指针是按值传递的,并且您不希望使用引用指针,因此您可以像这样使用指针指针:
#include <iostream>
using namespace std;
class Test {
public:
Test() {};
~Test(){};
int foo;
};
// tst will be a pointer to the pointer (address) of the Test instance.
void ToPointer(Test** tst)
{
Test* t1 = new Test();
t1->foo = 111222;
*tst = t1; // you can use the pointer tst,
// even though it is a copy of the original argument,
// because it points to the pointer that points to the Test instance.
}
int main()
{
Test* t2 = new Test(); // t2 stores the address of the Test instance
t2->foo = 2;
ToPointer(&t2); // send ToPointer() the address of t2,
// which is itself a pointer to the Test instance
int fff = t2->foo;
cout << fff << endl; // verify that fff is 111222
return (0);
}