2011-12-17 144 views
1
typedef struct nodetype 
{ 
int data; 
struct nodetype * left; 
struct nodetype * right; 
}node; 

typedef node * tree; 

tree newNode(int data) 
{ 
tree temp; 
temp = NULL; 
temp = (tree)malloc(sizeof(nodetype)); 
temp->data = data; 
temp->right = NULL; 
temp->left = NULL; 
return temp; 
} 

这里在函数newNode中,要创建一个节点,我们给NULL分配一个“temp”值。我不明白这是否有必要。如果我们不用NULL来初始化它,在什么情况下我应该在初始化时将ptr分配给NULL?上述代码中的指针初始化:何时将NULL分配给已初始化的指针?

+0

这不是初始化。初始化是指在声明值的同一语句中指定一个值,例如'树temp = NULL;'。 – 2011-12-17 22:35:17

回答

1

您将节点初始化为NULL,以便您可以区分空节点和非空节点(通过检查NULL)。否则,你无法判断一个节点是否为空。这是在谈论左右节点。没有明显的理由为什么temp启动为NULL,你可以删除它。

当你不知道你是否会用它指向某个东西时,你会分配一个指向NULL的指针,并且你将得到检查它是否被赋值为NULL的代码,以便它可以执行一些逻辑(比如穿过一棵树)。

2

temp = NULL因为该值立即被覆盖,所以没有必要。您的编译器可能会在优化阶段消除冗余代码。只需删除该行代码即可。

3

这是完全没有必要的,因为它会立即被malloc()覆盖,它会在分配失败时将其设置为... NULL,这意味着代码有问题!在malloc()之后

if (!temp) 
    return temp; 

应该有。

1

我怀疑空分配是因为程序员有一个严格的策略,总是分配他或她的变量。这不是一个糟糕的政策,虽然在这里没有必要。