与众不同之处在于什么? [insert_node(&(tmp-> left),value);] VS [tmp = tmp-> right; insert_node(及(TMP),值);]
void insert_node(struct btree **bt,int value)
{
btree *tmp= *bt, *r ;
if(*bt==NULL)// first node
{
(*bt)=(struct btree *)malloc(sizeof(btree));
(*bt)->data=value;
(*bt)->left=NULL;
(*bt)->right=NULL;
}
else
{
if(value > tmp->data)
insert_node(&(tmp->right),value);
else
insert_node(&(tmp->left),value);
}
#if 0 //start
OR /** COMMENT START
earlier I had below piece of code but not working
can any please explain what's the difference in
insert_node(&(tmp->left),value); VS [ tmp=tmp->right; insert_node(&(tmp),value);]
COMMENT END **/
else
{
if(value > tmp->data)
tmp=tmp->right;
else
tmp=tmp->left ;
insert_node(&tmp,value);
}
#endif //end
}
答案 0 :(得分:1)
在非工作情况下,您将为其提供tmp
变量的地址,从而更新指针,该指针位于堆栈中,不会用于任何内容。
在工作的情况下,你给出了bt节点中实际指针的地址,这就是你想要的。
答案 1 :(得分:0)
没有语义差异。 #2将下一个节点存储在一个局部变量中,该变量将是一个寄存器,而#1将该节点存储到寄存器中,但它不能作为局部变量使用。
如果您需要再次访问该值,请使用#2。