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