struct的部分初始化?

时间:2016-08-05 11:18:01

标签: c

是否可以静态初始化结构的一部分?

我的结构:

   struct data {
    char name[20];
    float a;
    int b;
    char c;
};

初始化和打印时:

struct data badge = {"badge",307};
printf("%s,%d\n", badge.name, badge.b);

这将打印出“徽章”,但不会打印出“307”。

如何在忽略char name[20]的同时使用int bfloat a

2 个答案:

答案 0 :(得分:8)

您可以按照@sps的建议使用C99的指定初始化程序

struct data badge = {.name = "badge", .b = 307};

但是在C89中,没有办法只初始化结构的某些成员。 所以,你必须这样做:

struct data badge = {"badge", 0.0, 307, 0};

请注意,即使使用指定的初始值设定项,未明确初始化的成员也将初始化为零。所以,以上两者都是等价的。

但是使用指定的初始值设定项,您还没有明确地初始化它(想象一下,如果你有100个成员的结构 并且你想只为它们中的两个提供一个初始 - 就像在你的例子中一样)并且使代码也更容易阅读。

答案 1 :(得分:3)

你可以,

 struct data badge = {.name = "badge", .b = 307};