【问题标题】:C structure initialization? [duplicate]C结构初始化? [复制]
【发布时间】:2011-03-11 18:43:25
【问题描述】:

如果结构中的一个字段本身就是结构,我如何初始化结构?

【问题讨论】:

    标签: c initialization structure


    【解决方案1】:

    您需要使用更多的大括号(实际上,它们是可选的,但 GCC 近来会发出警告)。这是一个例子:

    struct s1 { int a; int b; };
    struct s2 { int c; struct s1 s; };
    
    struct s2 my_s2 = { 5, { 6, 3 } };
    

    【讨论】:

    • 仅在成员 s 完全初始化(即所有成员)时才可选,如果您只想部分初始化结构,则必须这样做。
    • 在 C99 中,您可以使用以下更易于维护和阅读的符号:struct s2 my_s2 = { .c = 5, .s = { .a = 6, .b = 3 } };
    【解决方案2】:

    结构嵌套

    如果结构中的一个字段本身就是结构,则可以初始化结构

    struct add{
        int house;
        char road;
    };
    struct emp{
        int phone;
        struct add a;
    };
    
    struct emp e = { 123456, 23, "abc"};
    printf("%d %d %c",e.phone,e.a.house,e.a.road);
    

    【讨论】:

      【解决方案3】:
      struct A
      {
      int n;
      }
      
      struct B
      {
      A a;
      } b;
      

      您可以通过以下语句初始化 n。这就是你要找的东西吗?

      b.a.n = 10;
      

      【讨论】:

      • 在用于定义语言的术语中,这是 assignment 而不是 initialisation 的示例。在这种情况下,初始化器仅在对象声明时使用。
      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2016-12-11
      • 2017-01-06
      相关资源
      最近更新 更多