【发布时间】:2014-02-27 23:07:21
【问题描述】:
我正在编写一个程序,它在包含以下结构的节点的单链表上执行功能:
typedef int ITEM;
typedef struct NODE* NODEptr;
struct NODE
{
ITEM data;
NODEptr next;
};
这是我调用的将节点添加到列表头部的函数(hdList 指向列表的头部):
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE;
newNode->data = input;
newNode->next = nullptr;
hdList = newNode;
}
但是我在使用调试器时发现,当程序离开函数时 hdList 的值没有更新,即使它是通过引用传递的,我不知道为什么。
非常感谢您的帮助和建议。
编辑:根据要求,完整代码在这里:http://pastebin.com/bLv0S2QG 我也在用 Visual Studio 2013 编译
【问题讨论】:
-
看起来您应该将
newNode->next设置为hdList只需确保将hdList初始化为nullptr。 -
@ooga 回答这个问题!
-
为宏保留全部大写有助于避免名称冲突和无意的文本替换,并且也更方便眼睛和耳朵。为了与代码维护者进行良好的沟通,说 T* 比说
typedef T* T_ptr然后T_ptr更短更清晰。 -
Re "hdList is not updated",如果正确则需要完整的代码示例来诊断。请张贴这样的例子。但无论如何,请注意,如果使用公共起始指针作为实际参数调用该函数,则该函数保证一个只有一个节点的列表——这是意图吗?
-
好的,谢谢,我不知道大写的事情另外,我实际上被教导做 typedefs 以使其更具可读性,但我知道你来自哪里,也许我会改变它
标签: c++ pointers reference linked-list singly-linked-list