返回指针并更改指向的内容

时间:2018-01-26 08:45:16

标签: c++ pointers

我试图返回指针并改变它所指向的指针,但我似乎无法让它发挥作用。我是这样做的:

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。

2 个答案:

答案 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)

取决于您的平台。

Live demonstration

答案 1 :(得分:-3)

这里的问题是你要返回对本地指针的引用。

您应该将其更改为静态:

static int ptr=&something;

...然后返回。

或者你应该返回一个全局声明的指针的引用。