gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:03:45 24 4
gpt4 key购买 nike

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

#include<bits/stdc++.h>
using namespace std;
//define

class List{
public:
int data;
List *next;
public:
List(int n){
this->data=n;
this->next=NULL;
}
};

void add(List *head,int data){
List * nn = new List (data);
head=nn;
}
// driver code
int main(){
List *head=NULL;
List * nn = new List (45);
head=nn;
cout<<head->data;
return 0;
}

此代码正在打印 45。

class List{
public:
int data;
List *next;
public:
List(int n){
this->data=n;
this->next=NULL;
}
};

void add(List *head,int data){
List * nn = new List (data);
head=nn;
}
// driver code
int main(){
List *head=NULL;
add(head,45);
cout<<head->data;
return 0;
}

该程序不打印任何内容。它只是崩溃。

最佳答案

这个功能:

void add(List *head, int data)

需要 head逐个复制指针,因此调用者看不到函数内部指针的更改。这意味着指针 headmain未指向有效内存,取消引用它会调用未定义的行为(这可能会导致崩溃)。

使函数通过引用获取指针:
void add(List * &head, int data)

现在正在改变 head函数内部变化 headmain功能。

关于c++ - 为什么对函数内部的指针所做的更改在函数外部不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62225360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com