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

and*_*ndz 1 c structure

我有一个主结构,其中包含 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;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 5

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

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

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

另请注意,指定初始值设定项的语法是“.field = ”,而不是“ field :”