指针初始化:何时为初始化指针指定NULL?

时间:2011-12-17 22:26:11

标签: c++

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?

4 个答案:

答案 0 :(得分:3)

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

应该有:

if (!temp)
    return temp;

malloc()之后。

答案 1 :(得分:2)

上述代码中的

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

答案 2 :(得分:1)

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

当你不知道是否会用它来指向某个东西时,你指定一个指向NULL的指针,并且你将有代码检查它是否已被分配给NULL,以便它可以执行某些逻辑(如移动)通过一棵树)。

答案 3 :(得分:1)

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

相关问题