我的数据结构如下:
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->left
和p->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指针值)。
请澄清这个疑问。
答案 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->left
和p->right
分配为值p
。
没有“给予记忆”。
p->left
和p->right
都将包含与p
相同的地址。因此p->left
,p->right
和p
都指向同一个对象。