使指针全局C++

Making a pointer global C++

本文关键字:C++ 全局 指针      更新时间:2023-10-16

我用根指针构建了一个二叉树。

根指针不是应该在所有函数中更改吗,因为我声明它是全局的?我如何实现这一点?

谢谢

伪代码(在其他地方声明的左、右指针)

Node * root = new Node;

Node * BST::BuildTree(int label)
{
         root->left = changed;
        root->right = changed;
}
Node * BST::GetNode(int label)
{

  BTNode *ptr = root;
  cout << root->right;  //This gives me a seg fault since root is still NULL and not changed
}

这是因为您尚未在代码中为 root 分配有效的地址。

它应指向有效的节点:

void BST::CreateRoot()
{
  root = new (std::nothrow) Node;
}

在C++中,当您想使用"全局变量"时,您应该使用未命名的命名空间。好处是它可以防止全局变量很容易引入的名称冲突。

namespace
{
  Node * root = NULL;
}

如果你用C编码,我会在这里结束。但是,既然您正在使用C++,那么还有一件事。

您应该尽量避免使用全局变量,尤其是当您有很多相互依赖的全局变量时。通常,您可以创建单一实例类。

但我不认为你的情况使用单例那么复杂。只需向函数添加一个额外的输入参数,以指示要在哪个节点上运行。

// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
  node->left = changed;
  node->right = changed;
}