C++ 为什么在函数内部对指针所做的更改在函数外部不可见?

C++ 为什么在函数内部对指针所做的更改在函数外部不可见?,c++,pointers,C++,Pointers,我正在实施一个链表。有一个问题:当我在函数内部更改指针时,该更改在函数外部不可见 #包括 使用名称空间std; //定义 班级名单{ 公众: int数据; 列表*下一步; 公众: 列表(int n){ 这个->数据=n; 此->下一步=空; } }; 无效添加(列表*表头,整数数据){ 列表*nn=新列表(数据); 水头=nn; } //驱动程序代码 int main(){ 列表*head=NULL; 列表*nn=新列表(45); 水头=nn; coutdata=n; 此->下一步=空; } }

我正在实施一个链表。有一个问题:当我在函数内部更改指针时,该更改在函数外部不可见

#包括
使用名称空间std;
//定义
班级名单{
公众:
int数据;
列表*下一步;
公众:
列表(int n){
这个->数据=n;
此->下一步=空;
}
};
无效添加(列表*表头,整数数据){
列表*nn=新列表(数据);
水头=nn;
}
//驱动程序代码
int main(){
列表*head=NULL;
列表*nn=新列表(45);
水头=nn;
coutdata=n;
此->下一步=空;
}
};
无效添加(列表*表头,整数数据){
列表*nn=新列表(数据);
水头=nn;
}
//驱动程序代码
int main(){
列表*head=NULL;
加(总目,45);
cout此函数:

void add(List *head, int data)
复制
head
指针,因此调用方看不到函数中指针的更改。这意味着
main
中的指针
head
没有指向有效内存,取消引用它会调用未定义的行为(这可能会导致崩溃)

使函数改为通过引用获取指针:


现在,在函数中更改
head
会更改
main
函数中的
head

添加方法中有两个问题:

1) 您需要接受指向引用的指针(或指向指针的指针)

2) 您需要添加逻辑以遍历列表中的最后一个节点,并在末尾添加新节点。否则,每次使用新节点重置列表头时,新节点都指向null并成为一个节点列表

<>类似的实现,你可以参考。在C(不是C++)中,实现是要小心<代码> >包含< /COD>,特别是结合<代码>使用命名空间STD;< /Cord>这里简单的演示,简单地改变C++标准打破程序:
void add(List * &head, int data)