通过引用传递动态var的指针

时间:2013-09-10 14:53:22

标签: c++ pointers

我正在尝试创建动态变量并在new_test函数中通过引用传递其地址,但它不起作用。我做错了什么?

代码:

#include <iostream>
using namespace std;

struct test
{   
    int a;
    int b;
};  

void new_test(test *ptr, int a, int b)
{   
    ptr = new test;
    ptr -> a = a;
    ptr -> b = b;
    cout << "ptr:   " << ptr << endl; // here displays memory address
};  

int main()
{   

    test *test1 = NULL;

    new_test(test1, 2, 4); 

    cout << "test1: " << test1 << endl; // always 0 - why?
    delete test1;

    return 0;
}

2 个答案:

答案 0 :(得分:8)

代码不会通过引用传递指针,因此对参数ptr的更改对于函数是本地的,对调用者不可见。改为:

void new_test (test*& ptr, int a, int b)
                  //^

答案 1 :(得分:1)

下面:

void new_test (test *ptr, int a, int b)
{   
    ptr = new test; //<< Here ptr itself is a local variable, and changing it does not affect the value outside the function
    //...

您正在更改指针值本身,因此您需要指向指针的指针或指针的引用:

指针指针:

void new_test (test **ptr, int a, int b)
{   
    *ptr = new test;
    (*ptr) -> a = a;
    (*ptr) -> b = b;
    cout << "ptr:   " << *ptr << endl; // here displays memory address
}

并使用:

致电
new_test (&test1, 2, 4);

对指针的引用:

void new_test (test *& ptr, int a, int b) {/.../ }

我不建议混合指针和引用,因为它使程序难以阅读和跟踪。但这是个人偏好。