gpt4 book ai didi

C++ 使用指针

转载 作者:行者123 更新时间:2023-11-30 01:53:56 25 4
gpt4 key购买 nike

我不明白为什么它输出“123”,即使 deletenode 函数将 x 设置为 NULL。

#include <iostream>;
using namespace std;
struct node {int value; struct node *left,*right,*parent;};
void deletenode(node *a) {
delete a;
a=NULL;
}
int main(int argc, const char * argv[])
{
node *x = new node;
x->value=123;
deletenode(x);
if (x!=NULL) cout << x->value;
}

最佳答案

您具有以下签名:void deletenode(node *a)。您将指针 x 传递给该函数。指针值被复制。在函数内部,您可以通过 a = NULL 写入来修改局部指针值。

但是,该修改发生在拷贝上。原件不受影响。请注意,对于 delete 而言并非如此,因为 delete 不会修改指针,它会修改(或者更确切地说,清除)pointee .

肤浅的解决方案是通过引用传递指针值:

void deletenode(node*& a)

然而,大家一致认为在删除后将指针设置为 nullptr(或 NULL)并没有真正的帮助,因此通常不会这样做。因此,我会将您对 deletenode 的整个调用替换为简单的 delete x; 语句。

关于C++ 使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591586/

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