更改函数中指针的目标(到动态创建的对象)

时间:2013-10-29 14:29:13

标签: c++ function pointers

这可能很傻,但我在这里疯了......

为什么pTest在main中的测试函数之后没有指向新的int?它会导致seg故障。我怎么能这样做。

在我的实际代码中,我需要传递指针并动态创建对象,因为pTest是虚拟类的子类(从文件中读取,所以我事先并不知道)

void test(int* pTest)
{
    int *p = new int(2);
    pTest = p;
    std::cout << "pTest : " << *pTest << std::endl;
    return;
}

int main()
{
  int *pTest = NULL;
  test(pTest);
  std::cout << "pTest : " << *pTest << std::endl;

  return 0;
}

2 个答案:

答案 0 :(得分:2)

如果要改变作为参数传递的值,则必须提供指向它的指针。这意味着如果要更改给定int的值,则传递int *。在你的情况下,你想改变int *,所以你需要将它作为int **传递。

答案 1 :(得分:1)

如果您希望在此函数范围之外更改void test(int*& pTest)值,则需要通过引用传递pTest:pTest

void test(int*& pTest)
{
    int *p = new int(2);
    pTest = p;
    std::cout << "pTest : " << *pTest << std::endl;
    return;
}