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?
答案 0 :(得分:3)
完全没必要,因为它会被malloc()
立即覆盖,这会在分配失败时将其设置为... NULL
,这意味着代码有问题!
应该有:
if (!temp)
return temp;
在malloc()
之后。
答案 1 :(得分:2)
temp = NULL
不是必需的,因为该值会立即被覆盖。您的编译器可能会在优化阶段消除冗余代码。只需删除该行代码即可。
答案 2 :(得分:1)
将节点初始化为NULL,以便区分空节点和不节点(通过检查NULL)。否则,您无法判断节点是否为空。这是在讨论左右节点。没有明显的原因,为什么temp被启动为NULL,你可以删除它。
当你不知道是否会用它来指向某个东西时,你指定一个指向NULL的指针,并且你将有代码检查它是否已被分配给NULL,以便它可以执行某些逻辑(如移动)通过一棵树)。
答案 3 :(得分:1)
我怀疑NULL赋值是因为程序员有一个严格的策略,总是分配他或她的变量。这不是一个糟糕的政策,虽然这里没有必要。