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

标签 c

所以我有一个结构,里面有一个指针数组(指向另一个结构)。 我试图将该数组初始化为 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 } 初始化器也适用于其他类型。 (一些编译器警告这种构造(“初始化程序中缺少大括号”和类似的)。那些编译器是愚蠢的,需要停止。)

关于c - 如何初始化指向结构内部的 NULL 的指针数组,并且该结构位于其他结构的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306122/

相关文章:

c++ - 如何将图像中的每个像素作为 16 位索引存储到颜色表中?

c++ - 在 C++ 中使用(丑陋的)C 代码与 extern "C"

c - 将二进制文件读入结构变量,出现段错误

我可以在双重解锁 pthread_mutex_t 时强制崩溃吗?

c - CRC16 CCITT 上下文中的截断多项式意味着什么

字符 arr = "...";在C程序中导致崩溃

c - 解析 C 中的命令行条目 : implementing a shell

java - 从不同语言调用库函数

c++ - C 或 C++ 中的单引号与双引号

c++ - 如何编写支持 LTO 的代码?