我试图返回指针并改变它所指向的指针,但我似乎无法让它发挥作用。我是这样做的:
class someClass
{
public:
int *& foo();
private:
int * ptr = 5;
};
int *& someClass::foo()
{
return ptr;
}
int main()
{
int * ptrTwo = foo();
ptrTwo = NULL;
return 0;
}
我希望这会将ptr更改为NULL。发生的事情是ptr没有受到影响,只有ptrTwo被改为NULL。
答案 0 :(得分:2)
你可能想要这个:
#include <cstdio>
class className
{
public:
int *ptr = (int*)1;
int *& foo();
};
int *& className::foo()
{
return ptr;
}
int main()
{
className instance;
int *& ptrTwo = instance.foo();
// ^
// |---- watch the &
//
printf("ptrTwo = %p\n", ptrTwo);
ptrTwo = NUL // this actually sets instance.ptr to NULL
printf("instance.ptr = %p\n", (void*)instance.ptr);
}
BTW上面的代码是Minimal, Complete, and Verifiable example
输出将是这样的:
ptrTwo = 00000001
instance.ptr = 00000000
或
ptrTwo = 0x1
instance.ptr = (nil)
取决于您的平台。
答案 1 :(得分:-3)
这里的问题是你要返回对本地指针的引用。
您应该将其更改为静态:
static int ptr=&something;
...然后返回。
或者你应该返回一个全局声明的指针的引用。