如何初始化结构内部的指向NULL的指针数组,并且该结构位于其他结构的数组中

雷克·梅格

所以我有一个结构,里面有一个指向另一个结构的指针数组。我试图将数组初始化为NULL,但似乎无法在C中完成。如何将数组Rpr初始化为NULL?

我尝试以另一种方式执行此操作,就像您在下面的代码中看到的那样,但是它不起作用。

typedef struct {maillon *Rpr [7];} repere;
repere R[26];

for(int i=0;i<26;i++){
   R[i].Rpr={NULL};
}

它会弹出一些随机的无关紧要的错误。

甲肾上腺素

C在赋值(它是一个表达式)和初始化(它是变量的定义的一部分)之间进行区分。特别是,该= { ... }语法仅对初始化有效。

如果要使用一个单独的循环执行此操作,则需要两个嵌套循环(或许多重复的代码来设置所有元素):

for (int i=0; i<26; i++) {
    for (int j = 0; j<7; j++) {
        R[i].Rpr[j] = NULL;
    }
}

或者,只需使用初始化:

repere R[26] = { { { NULL } } };

从技术上讲,这仅在外部数组的第一个元素中的结构中初始化内部数组的第一个元素,但是C没有“半初始化”变量。规则是,如果有一个初始化程序未覆盖变量的所有字段,则将它们隐式设置为零。对于指针,这意味着它们都是空指针。

实际上,可以使“用0初始化所有内容”初始化程序变得更短,更通用:

repere R[26] = { 0 };

{ 0 }初始化器也适用于其他类型。(一些编译器对此构造发出警告(“初始化器中缺少大括号”等)。这些编译器很愚蠢,需要停止。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章