c-当我在函数ins()中设置r=NULL时,程序没有任何影响



在处理指针时,我们正在处理地址,对吗?

那么,当struct node pointer n被传递给t(struct node *t=n)时,以及之后如果t被分配给NULLn不应该也变成NULL吗?

ps-:这是一个二进制树程序

#include<stdio.h>   //check at third line of ins() function
#include<stdlib.h>
struct node{
int data;
struct node* left,*right;
};
struct node* n(int dat){
struct node *x=(struct node*)malloc(sizeof(struct node));
x->data=dat;
x->left=NULL;   x->right=NULL;
return x;
};
void ins(struct node* n,struct node* r){
struct node* t=r,*y=NULL; //ok so when i put r=NULL in this next line should this block of memory go 
//r=NULL;                  //NULL
while(t!=NULL){
y=t;
if(t->data>n->data)
{
if(t->left==NULL)
{t->left=n;
t=NULL;
}
else
t=t->left;
}
else {
if(t->right==NULL){
t->right=n;
t=NULL;
}else
t=t->right;
}
}
}
void inorder(struct node* n){
if(n!=NULL){
inorder(n->left);
printf("%d  ",n->data);
inorder(n->right);
}}
void main(){
struct node *a,*b,*c,*d,*e,*f,*g,*h;
a=n(32);    b=n(20);    c=n(100);   d=n(16);
e=n(25);    f=n(50);    g=n(144);   h=n(19);
a->left=b;  a->right=c;
b->left=d;  b->right=e;
c->left=f;  c->right=g;
ins(h,a);
inorder(a);
}```

使用struct node* t=r,您将创建一个新的自变量t,该变量指向与r相同的位置(让我们称之为a(。

这意味着*r的任何变化都会反映在*t中,因为它们都指向相同的位置A。

当为r指定NULL时,t变量仍然指向位置A,但r不再指向。

一个小例子:

int A = 0;
int *r = &A;
int *t = r;
// *r==0, *t==0, point to same location
*r = 55;
// *r==55, *t==55 (same location)
r = NULL;
// *t==55 (*r is no longer valid as r is NULL)

相关内容

最新更新