关于二叉树上下文中的NULL指针的澄清

时间:2016-08-19 23:33:32

标签: c++ pointers null binary-tree nodes

我的数据结构如下:

struct node
{
   int count;
   node *left,*right;
   node(int count,node* l,node*r)
   {
      this->count=count;
      this->left=l;
      this->right=r;
   }
   node* update(int l,int r,int v);
};

现在我宣布一个全局变量:

node* p=new node(0,NULL,NULL);

因此,此声明将导致p拥有:

p->count=0;  
p->left=NULL;
p->right=NULL;

我的问题是如果我写p->left=p->right=p;会发生什么。据我所知,它会为p->leftp->right提供最初为NULL的内存。 所以,它将是:

p->left->count=0, p->left->left=NULL,p->left->right=NULL;
p->right->count=0, p->right->left=NULL,p->right->right=NULL;

但我不认为发生的事情是因为我打电话的时候 update(0,9,0)其中l = 0,r = 9且v = 0,如果我有,它工作正常 在调用之前写了p->left=p->right=p语句 功能。 但是如果我评论这个陈述(即它试图访问)它就无法运行 我猜的是NULL指针值)。 请澄清这个疑问。

2 个答案:

答案 0 :(得分:0)

  

但我不认为发生了什么,因为我在打电话时

你是对的。实际上,p->left->left 不是 NULL。它是p。同样适用于right。 那是因为您要将它们分配给p

p->left = p->right = p;

因此,当您执行p->left->left时,您正在p->left,因此p。这里有一个圆形指针。 p指向自己的实例。

答案 1 :(得分:0)

作业p->left = p->right = p会将p->leftp->right分配为值p

没有“给予记忆”。

p->leftp->right都将包含与p相同的地址。因此p->leftp->rightp都指向同一个对象。