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. 通过单独的结构体
  2. 通过嵌套结构体

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的方式访问嵌套结构体的成员,如下所示:

  1. e1.doj.dd
  2. e1.doj.mm
  3. 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); 
}

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想