C++ C++;链表-插入节点函数不';t更新超出功能范围的值

C++ C++;链表-插入节点函数不';t更新超出功能范围的值,c++,pointers,reference,linked-list,singly-linked-list,C++,Pointers,Reference,Linked List,Singly Linked List,我正在编写一个程序,该程序在包含以下结构节点的单链表上执行函数: typedef int ITEM; typedef struct NODE* NODEptr; struct NODE { ITEM data; NODEptr next; }; 这是我调用的将节点添加到列表头的函数(hdList指向列表头): 但是,在使用调试器时,我发现当程序离开函数时,hdList的值不会更新,即使它是通过引用传递的,我不知道为什么 非常感谢你的帮助和建议 编辑:根据要求,完整代码如下:

我正在编写一个程序,该程序在包含以下结构节点的单链表上执行函数:

typedef int ITEM;
typedef struct NODE* NODEptr;

struct NODE
{
    ITEM data;
    NODEptr next;
};
这是我调用的将节点添加到列表头的函数(hdList指向列表头):

但是,在使用调试器时,我发现当程序离开函数时,hdList的值不会更新,即使它是通过引用传递的,我不知道为什么

非常感谢你的帮助和建议

编辑:根据要求,完整代码如下:
另外,我正在使用Visual Studio 2013编译,正确的函数如下所示

void addToHead(NODEptr &hdList, ITEM input)
{
    NODEptr newNode = new NODE; 
    newNode->data = input;
    newNode->next = hdList;
    hdList = newNode; 
}
或者如果编译器支持C++ 2011,则

void addToHead(NODEptr &hdList, ITEM input)
{
    NODEptr newNode = new NODE { input, hdList }; 
    hdList = newNode; 
}
最初,必须通过
nullptr
NULL
初始化
hdList
。比如说

NODEptr hdList = nullptr;

看起来您应该将
newNode->next
设置为
hdList
只要确保
hdList
已初始化为
nullptr
@ooga就可以了!为宏保留所有大写字母有助于避免名称冲突和无意中的文本替换,而且对眼睛和耳朵来说也更容易。为了与代码的维护人员进行良好的沟通,说T*比说
typedef T*T_ptr
T_ptr
.Re“hdList未更新”,更简短、更清晰,如果这是正确的,那么需要一个完整的代码示例来诊断它。请不要张贴这样的例子。但是无论如何,请注意,如果函数是用一个公共开始指针作为实际参数调用的,那么函数保证一个只有一个节点的列表——这就是目的吗?好的,谢谢,我不知道caps的事情,而且我实际上被教过做typedefs以使它更可读,但我知道你是从哪里来的,也许我会根据函数的调用方式将其更改为“正确”:这个答案中给出的代码对于OP的调用模式可能是错误的。这就是为什么我要求OP提供完整的代码示例。例如,可以使用
hdlist
引用列表最后一个节点中的
next
指针调用该函数,并且使用OP的实现调用该函数是有意义和正确的。还要注意OP的声明“hdlist未更新”不会因更改/修复列表的链接而受到任何影响。因此,OP在问题描述或选择此答案作为解决方案方面肯定是错误的。因此,它将有助于回答中明确说明的假设,即关于函数调用的假设(以及OP的声明是不正确的)。@Cheers和hth.-Alf“correct”取决于函数的调用方式:此答案中给出的代码对于OP的调用模式可能是错误的。“无论OP如何调用函数,函数都是正确的。”。只能使用无效的函数,仅此而已。
NODEptr hdList = nullptr;