C語言結構體嵌套

C語言中的嵌套結構體表示在一個結構體中可以使用另一個結構作爲成員。在C語言中定義結構體嵌套有兩種方法:

  1. 通過獨立的結構
  2. 通過嵌入式結構

1. 獨立結構

我們可以創建2個結構體,但在主結構中應該使用依賴其它結構體作爲成員。我們來看看嵌套結構體的代碼。

struct Date  
{  
   int dd;  
   int mm;  
   int yyyy;   
};  
struct Employee  
{     
   int id;  
   char name[20];  
   struct Date doj;  // 嵌套一個結構體:Date,用於存儲日期
}emp1;

如上所見,doj(加入日期)是Date類型的變量。 這裏doj用作爲Employee結構體中的成員。通過這樣的方式,我們可以在其他結構體中使用Date結構。

2.嵌入式結構體

我們可以在結構體內定義結構體,它比第一種方式需要更少的代碼。但它不能用於其它結構中。

struct Employee  
{     
   int id;  
   char name[20];  
   struct Date  
    {  
      int dd;  
      int mm;  
      int yyyy;   
    }doj;  
}emp1;

訪問嵌套結構體

我們可以通過Outer_Structure.Nested_Structure.member訪問嵌套結構的成員,如下所示:

e1.doj.dd  
e1.doj.mm  
e1.doj.yyyy

嵌套結構體示例

我們來看看C語言中嵌套結構體的一個簡單例子。創建一個源代碼文件:nested-structure.c,其代碼如下 -

#include <stdio.h>  
#include <string.h>  
struct Employee
{
    int id;
    char name[20];
    struct Date
    {
        int dd;
        int mm;
        int yyyy;
    }doj;
}e1;

int main()
{
    //storing employee information  
    e1.id = 1001;
    strcpy(e1.name, "Maxsu");//copying string into char array  
    e1.doj.dd = 12;
    e1.doj.mm = 11;
    e1.doj.yyyy = 2018;

    //printing first employee information  
    printf("employee id : %d\n", e1.id);
    printf("employee name : %s\n", e1.name);
    printf("employee date of joining (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd, e1.doj.mm, e1.doj.yyyy);
    return 0;
}

執行上面示例代碼,得到以下結果 -

employee id : 1001
employee name : Maxsu
employee date of joining (dd/mm/yyyy) : 12/11/2018