通过引用传递动态变量的指针
Passing pointer of dynamic var by reference
我正在尝试创建动态变量并通过函数内的引用传递其地址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;
}
代码不会通过引用传递指针,因此对参数ptr
更改是函数的本地更改,对调用方不可见。更改为:
void new_test (test*& ptr, int a, int b)
//^
在这里:
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) {/.../ }
我不建议混合使用指针和引用,因为这会使程序难以阅读和跟踪。但这是个人喜好。
相关文章:
- 将地址分配给本地指针后,公共对象的变量将消失
- 如果非动态变量被指针引用,何时超出范围?
- 在函数结束后使用指向变量的指针是否安全?
- 有没有将变量名称转换为双指针的简短方法?
- 成员变量指针的函数参数包
- C++ - 使用变量指针调用函数
- 如何返回值为NULL的变量指针
- 在编译时以增量方式构建变量指针的向量
- C 取消实例变量指针
- 每个方法调用上都覆盖了本地变量指针
- 决定对基类的变量指针进行函数调用
- 使用 valgrind 时获得 int 变量指针的无效读取大小错误
- 变量指针的成员函数未绘制到SDL_Surface?
- 何时使用成员变量指针
- 从成员变量指针返回布尔值
- 指向C#和C++之间接口的变量指针
- c++中指向self的成员变量指针
- 为什么变量指针包含相同数据类型的地址?
- 指向用户定义类型的类的全局变量指针
- C++分配一个变量指针地址