C语言教程-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("Enter employee information?\n");
scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);
printf("Printing the employee information....\n");
printf("name: %s\nCity: %s\nPincode: %d\nPhone: %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}
输出
Enter employee information?
Arun
Delhi
110001
1234567890
Printing the employee information....
name: Arun
City: Delhi
Pincode: 110001
Phone: 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("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 : 101
employee name : Sonoo Jaiswal
employee date of joining (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("Enter employee information?\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("Printing the details....\n");
printf("%s %s %d %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}