如何初始化嵌套结构变量?

时间:2017-03-17 13:35:11

标签: c

struct date{
    int month;
    int day;
    int year;
};
struct employee{
    struct nmadtype nameaddr;
    int salary;
    struct date datehired;
};
struct employee e[3];
for(i=0;i<3;i++)
struct employee e[i].datehired={2,2,16};

我想初始化员工通过datehired变量雇用的日期,但我不想单独初始化struct date的每个成员(如e [i] .datehired.month = 2)所以我尝试了最后一步但它是给出编译错误,因此如果我的3名员工有不同的雇用日期,那么plz建议一种方法甚至可以工作。

2 个答案:

答案 0 :(得分:3)

您尝试执行的操作是分配,而不是初始化,这就是它失败的原因。在定义变量时完成初始化。

你可以做的是使用复合文字:

e[i].datehired = (struct date){2, 2, 16};

这将创建一个struct date类型的临时变量,并将其值成员分配给赋值的左侧。

答案 1 :(得分:0)

您可以使用带有init值的struct date变量来执行此操作:

#include <stdio.h>

struct date{
     int month;
     int day;
     int year;
 };

 struct employee{
     struct date datehired;
 };

int main(void)
{
    struct employee e[3];
    struct date initVal= {2,2,16};

     for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++){
         e[i].datehired=initVal;
     }
}

或使用Compound Literals

#include <stdio.h>

struct date{
     int month;
     int day;
     int year;
 };

 struct employee{
     struct date datehired;
 };

int main(void)
{
    struct employee e[3];

     for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++){
         e[i].datehired=(struct date){2,2,16};;
     }
}

最简单的基本代码是

#include <stdio.h>

struct date{
     int month;
     int day;
     int year;
 };

struct employee{
    struct date datehired;
};

int main(void)
{
    struct employee e[3];

     for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++)
     {
         e[i].datehired.month = 2;
         e[i].datehired.day   = 2;
         e[i].datehired.year  = 16;
     }
}