如何定义和初始化包含结构数组的 C 结构

How to define and initialize C structure containing structure arrays

我的主要结构包含 2 个数组的另一个结构。我在代码中将它用作常量,所以我想提前初始化它。我将如何正确地做到这一点?这是我的例子,它抛出百万警告并且显然不起作用。

#include <stdio.h>

typedef struct{
    char a;
    char b;
} subStruct1;

typedef struct{
    char c;
    char d;
}subStruct2;

typedef struct{
    subStruct1 *SS1;
    subStruct2 *SS2;
} mainStruct;

mainStruct MS = {
    SS1: {{'a', 'b'}, {'A', 'B'}},
    SS2: {{'c', 'd'}, {'C', 'D'}}
};

int main()
{
    printf("%c %c %c",MS.SS1[0].a,MS.SS1[1].b,MS.SS2[1].c);
    return 0;
}

您不能使用数组初始值设定项来初始化指针。但是,您可以使用数组类型的复合文字:

mainStruct MS = {
    .SS1 = (subStruct1 []){{'a', 'b'}, {'A', 'B'}},
    .SS2 = (subStruct2 []){{'c', 'd'}, {'C', 'D'}}
};

这将创建两个数组对象并将两个指针初始化为指向每个对象的第一个元素。

另请注意,指定初始化程序的语法是“.field=”,而不是“field:”