这个指针初始化是否必要?

时间:2010-05-14 20:21:10

标签: c initialization malloc

假设我有以下内容:

 CHARLINK * _init_link(CHARLINK **link)
 {
    short i;
    (*link)->cl = (CHARLINK **) calloc(NUM_CHARS, sizeof(CHARLINK *));
    for (i = 0; i < NUM_CHARS; i++)
        (*link)->cl[i] = NULL;
    return (*link);
}

循环是将每个元素初始化为NULL还是从calloc自动为空?

3 个答案:

答案 0 :(得分:13)

是的,循环中的NULL赋值是必要的。 calloc初始化为所有位0.但是空指针可能不会像那样表示。它取决于实现。因此,分配是必要的。

答案 1 :(得分:7)

这取决于您的系统,但绝大多数情况下都可以。 calloc()返回一个填充零的缓冲区。但是,计算机上的空指针可能不是0的位模式。在空指针不为零的机器上,您可能最终遇到麻烦。

答案 2 :(得分:3)

不,calloc将其缓冲区初始化为0。