向函数传递指针变量
C++: Passing pointer variable to function
我有一个类Node:
class Node {
public:
int item;
Node * nextLink;
};
在函数外声明一个Node指针:
Node * newNode;
然后,把这个指针传递给函数foo:
void foo(Node * node) {
node = new Node();
node->item = 1;
Node * anotherNode = new Node();
anotherNode->item = 2;
node->nextLink = anotherNode;
}
实际调用:
foo(newNode);
在foo的末尾(但在存在之前),我可以看到node->item和node->nextLink指向正确的位置。然而,当从foo返回时,我检查newNode,项目是正确的,但nextLink不在那里。
有什么建议吗?由于
您需要传递一个引用。您正在修改指针
的副本。试
void foo(Node*& node)
在foo()
中,您正在修改传递给函数的指针的本地副本。将foo
修改为:
void foo(Node ** node) {
*node = new Node();
(*node)->item = 1;
Node * anotherNode = new Node();
anotherNode->item = 2;
(*node)->nextLink = anotherNode;
}
则调用变为:
foo( &newNode );
你说发生的事我不太明白。因为你是按值传递指针变量,它在调用函数中的值根本不应该被改变,据我所知,所以你实际上不应该看到你的函数的任何结果。
虽然我无法解释当前代码中发生的细节,但我强烈建议您这样尝试:
Node * foo(void) {
Node * node = new Node();
node->item = 1;
Node * anotherNode = new Node();
anotherNode->item = 2;
node->nextLink = anotherNode;
return node;
}
和调用:
Node *newNode = foo();
由于你的函数实际上并没有对传入的指针值做任何事情,因此使用局部变量创建所有内容并返回指向新分配节点的指针更有意义。
(您也可以像其他人建议的那样传递对指针的引用,但我不认为这是在这种情况下良好的编程风格。简单地从函数返回指针并在调用代码中将其赋值给适当的变量会更清楚。
您有三个选择。你可以传递一个Node**作为输入,一个Node*&作为输入,或者您可以从foo方法返回Node*。
如果你想让函数foo
改变指针,你必须用指针的地址来调用它,像这样:
Node * newNode;
void foo(Node ** nodepointer) {
(*nodepointer) = new Node();
(*nodepointer)->item = 1;
Node * anotherNode = new Node();
anotherNode->item = 2;
anotherNode->nextLink = NULL;
(*nodepointer)->nextLink = anotherNode;
}
foo(&newNode);
如上所示,您还应该将anotherNode->nextLink
设置为NULL
以标记列表的结束。
相关文章:
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用