【问题标题】:Direct initialization of a struct in C在 C 中直接初始化结构
【发布时间】:2015-05-12 12:07:30
【问题描述】:

我有:

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 是一个结构日期,第二个参数也应该是一个结构日期。所以它应该工作。谢谢和问候

【问题讨论】:

标签: c struct


【解决方案1】:
struct person p2 = { "Jane Doe", d};

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

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

(C11, 6.7.9p4) “具有静态或线程存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。”

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

【讨论】:

    【解决方案2】:
     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);
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多