繁体   English   中英

指针初始化:何时将NULL分配给初始化的指针?

[英]Pointer Initialization : When to assign NULL to the initialized pointer?

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?

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

应该有一个:

if (!temp)
    return temp;

就在malloc()

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

我怀疑NULL分配是因为程序员具有始终分配其变量的严格策略。 这不是一个坏政策,尽管这里没有必要。

您可以将节点初始化为NULL,以便可以将空节点与非空节点区分开(通过检查NULL)。 否则,您将无法判断节点是否为空。 这是在谈论左右节点。 没有明显的原因将temp初始化为NULL,可以将其删除。

当您不知道是否将其用于指向某物时,您可以将其分配给NULL指针,并且您将拥有检查其是否已分配给NULL的代码,以便它可以执行某些逻辑(例如遍历树) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM