C 語言嵌套結構體
C為我們提供了將一個結構嵌套在另一個結構中的功能,從而創建復雜的數據類型。例如,我們可能需要在結構中存儲實體員工的地址。而地址也可以包含其他信息,例如街道編號,城市,地區和密碼。因此,要存儲員工的地址,我們需要將員工的地址存儲到一個單獨的結構中,并將該結構的地址嵌套到該結構的員工中。看下面的程序。
示例
#include<stdio.h>
struct address
{char city[20];int pin;char phone[14];
};
struct employee
{char name[20];struct address add;
};
void main ()
{struct employee emp;printf("輸入員工信息?\n");scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);printf("打印員工信息....\n");printf("姓名: %s\n城市: %s\nP編號: %d\n電話: %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}
輸出結果
輸入員工信息?Arun Delhi 110001 1234567890 打印員工信息.... 姓名: Arun 城市: Delhi 編號: 110001電話: 1234567890
該結構可以通過以下方式嵌套。
- 通過單獨的結構
- 通過嵌入式結構
1)分開的結構
在這里,我們創建了兩個結構,但是從屬結構應在主結構內部用作成員。看以下示例。
示例
struct Date
{int dd;int mm;int yyyy;
};
struct Employee
{ int id;char name[20];struct Date doj;
}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嵌套結構示例
讓我們來看一個簡單的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( )
{//存儲員工信息e1.id=101;strcpy(e1.name, "Sonoo Jaiswal");//將字符串復制到字符數組中e1.doj.dd=10;e1.doj.mm=11;e1.doj.yyyy=2014;//打印第一個雇員信息printf( "員工ID : %d\n", e1.id);printf( "員工姓名 : %s\n", e1.name);printf( "員工加入日期 (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd,e1.doj.mm,e1.doj.yyyy);return 0;
}
輸出:
員工ID : 101
員工姓名 : Seagull Ali
員工加入日期 (dd/mm/yyyy) : 10/11/2014
將結構傳遞給函數
和其他變量一樣,結構也可以傳遞給函數。我們可以將結構成員傳遞給函數,或者一次傳遞結構變量。下面的示例將結構變量employee傳遞給display()函數,該函數用于顯示雇員的詳細信息。
示例
#include<stdio.h>
struct address
{char city[20];int pin;char phone[14];
};
struct employee
{char name[20];struct address add;
};
void display(struct employee);
void main ()
{struct employee emp;printf("輸入員工信息?\n");scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);display(emp);
}
void display(struct employee emp)
{printf("打印員工信息.....\n");printf("%s %s %d %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}