C為我們提供了將一個結構嵌套在另一個結構中的功能,從而創(chuàng)建復雜的數(shù)據(jù)類型。例如,我們可能需要在結構中存儲實體員工的地址。而地址也可以包含其他信息,例如街道編號,城市,地區(qū)和密碼。因此,要存儲員工的地址,我們需要將員工的地址存儲到一個單獨的結構中,并將該結構的地址嵌套到該結構的員工中??聪旅娴某绦?。
#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
該結構可以通過以下方式嵌套。
通過單獨的結構
通過嵌入式結構
在這里,我們創(chuàng)建了兩個結構,但是從屬結構應在主結構內部用作成員。看以下示例。
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; }emp1;
可以看到,doj是date類型的變量。這里,doj被用作Employee結構中的成員。這樣,我們可以在許多結構中使用Date結構。
嵌入式結構使我們能夠在結構內部聲明結構。因此,它需要較少的代碼行,但不能在多個數(shù)據(jù)結構中使用??匆韵率纠?。
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語言嵌套結構示例。
#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");//將字符串復制到字符數(shù)組中 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
和其他變量一樣,結構也可以傳遞給函數(shù)。我們可以將結構成員傳遞給函數(shù),或者一次傳遞結構變量。下面的示例將結構變量employee傳遞給display()函數(shù),該函數(shù)用于顯示雇員的詳細信息。
#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); }