我正在尝试创建动态变量并在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;
}
答案 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) {/.../ }
我不建议混合指针和引用,因为它使程序难以阅读和跟踪。但这是个人偏好。