在C中直接初始化结构

时间:2015-05-12 12:07:31

标签: c struct

我有:

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

struct person {
char name[25];
struct date birthday;
};


struct date d = { 1, 1, 1990 }; 

使用

进行初始化
struct person p1 = { "John Doe", { 1, 1, 1990 }};

作品。

但如果我尝试

struct person p2 = { "Jane Doe", d};

我收到如下错误:

"日期无法转换为int"。

什么错了? d是结构日期,第二个参数也应该是结构日期。所以它应该工作。谢谢和问候

2 个答案:

答案 0 :(得分:8)

struct person p2 = { "Jane Doe", d};

只有声明在块范围内时才能以这种方式声明。在文件范围,您需要常量初始值设定项(d是一个对象,对象的值不是C中的常量表达式。

原因是在没有存储类说明符的文件范围内声明的对象具有静态存储持续时间而C表示:

  

(C11,6.7.9p4)"具有静态或线程存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。"

在没有存储类说明符的块范围内,该对象具有自动存储持续时间。

答案 1 :(得分:0)

 I would suggest that to try :) 

struct person

{

  float salary;

  int age;

  char name[20];

};

int main(){

struct person person1={21,25000.00,"Rakibuz"};

 printf("person name: %s  \n",person1.name);

 printf("person age: %d\n",person1.age);

 printf("person salary: %f\n",person1.salary);


}