2017-03-17 67 views
0
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可变的,但我不想单独初始化结构日期的每个成员(如E [I] .datehired.month = 2),所以我试图在最后一步,但它给编译错误,所以PLZ建议一种方法,如果我的3名雇员有不同的雇用日期,甚至会工作。如何初始化嵌套结构变量?

回答

3

你试图做的是分配,不是初始化,这就是为什么它的失败。在定义变量时完成初始化。

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

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

这将创建struct date类型的临时变量并赋予其价值成员明智的赋值的左侧。

+0

感谢解决我的问题是一个伟大而短暂的解决方案 –

0

您可以使用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; 
    } 
}