C為我們提供了將一個(gè)結(jié)構(gòu)嵌套在另一個(gè)結(jié)構(gòu)中的功能,從而創(chuàng)建復(fù)雜的數(shù)據(jù)類型。例如,我們可能需要在結(jié)構(gòu)中存儲(chǔ)實(shí)體員工的地址。而地址也可以包含其他信息,例如街道編號(hào),城市,地區(qū)和密碼。因此,要存儲(chǔ)員工的地址,我們需要將員工的地址存儲(chǔ)到一個(gè)單獨(dú)的結(jié)構(gòu)中,并將該結(jié)構(gòu)的地址嵌套到該結(jié)構(gòu)的員工中??聪旅娴某绦?。
#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編號(hào): %d\n電話: %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}輸出結(jié)果
輸入員工信息? Arun Delhi 110001 1234567890 打印員工信息.... 姓名: Arun 城市: Delhi 編號(hào): 110001 電話: 1234567890
該結(jié)構(gòu)可以通過以下方式嵌套。
通過單獨(dú)的結(jié)構(gòu)
通過嵌入式結(jié)構(gòu)
在這里,我們創(chuàng)建了兩個(gè)結(jié)構(gòu),但是從屬結(jié)構(gòu)應(yīng)在主結(jié)構(gòu)內(nèi)部用作成員??匆韵率纠?/p>
struct Date
{
int dd;
int mm;
int yyyy;
};
struct Employee
{
int id;
char name[20];
struct Date doj;
}emp1;可以看到,doj是date類型的變量。這里,doj被用作Employee結(jié)構(gòu)中的成員。這樣,我們可以在許多結(jié)構(gòu)中使用Date結(jié)構(gòu)。
嵌入式結(jié)構(gòu)使我們能夠在結(jié)構(gòu)內(nèi)部聲明結(jié)構(gòu)。因此,它需要較少的代碼行,但不能在多個(gè)數(shù)據(jù)結(jié)構(gòu)中使用??匆韵率纠?/p>
struct Employee
{
int id;
char name[20];
struct Date
{
int dd;
int mm;
int yyyy;
}doj;
}emp1;我們可以通過Outer_Structure.Nested_Structure.member訪問嵌套結(jié)構(gòu)的成員,如下所示:
e1.doj.dd e1.doj.mm e1.doj.yyyy
讓我們來看一個(gè)簡單的C語言嵌套結(jié)構(gòu)示例。
#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( )
{
//存儲(chǔ)員工信息
e1.id=101;
strcpy(e1.name, "Sonoo Jaiswal");//將字符串復(fù)制到字符數(shù)組中
e1.doj.dd=10;
e1.doj.mm=11;
e1.doj.yyyy=2014;
//打印第一個(gè)雇員信息
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
和其他變量一樣,結(jié)構(gòu)也可以傳遞給函數(shù)。我們可以將結(jié)構(gòu)成員傳遞給函數(shù),或者一次傳遞結(jié)構(gòu)變量。下面的示例將結(jié)構(gòu)變量employee傳遞給display()函數(shù),該函數(shù)用于顯示雇員的詳細(xì)信息。
#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);
}