使用NULL值初始化结构

时间:2015-11-04 08:51:51

标签: c struct null-pointer

我在初始化此结构时遇到问题:

struct node {
    int label;
    struct node *lchild;
    struct node *rchild;
}

int main(void) {
    struct node n1;
    n1.label = 1;

    return EXIT_SUCCESS;
}

问题是我的成员lchildrchild没有指向NULL。

我可以通过添加

解决问题
n1.lchild = NULL;
n1.rchild = NULL;

但我不明白为什么我需要这样做?

2 个答案:

答案 0 :(得分:7)

  

我不明白为什么我需要这样做

因为编译器不会为你做这件事。

如果您可以确保成员在写入之前无法阅读,则可以跳过此步骤。

答案 1 :(得分:6)

n1等自动存储对象的成员不会自动进行零初始化(参见C11标准, 6.7.9.10 )。你必须自己做。

通过适当初始化n1

,您可以轻松解决此问题
struct node n1 = {1};

这会将第一个成员设置为1,并将其余部分初始化,这意味着指针会初始化为NULL。如果您愿意,可以更明确:

struct node n1 = {1, NULL, NULL};

参考文献:

根据C11标准, 6.7.9初始化

  
      
  1. 如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者更少的字符   用于初始化已知大小的数组的字符串文字   是数组中的元素,聚合的其余部分应为   隐式初始化与具有静态存储的对象相同   持续时间
  2.   

而且,之前在同一部分,

  
      
  1. ...如果没有显式初始化具有静态或线程存储持续时间的对象,则:
    - 如果它具有指针类型,则为   初始化为空指针;
  2.   

(强调我的)