English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico do C

Controle de Fluxo do C

Funções no C

Array no C

Ponteiro no C

String no C

Estruturas do C

Arquivos do C

C Outros

Manual de Referência do C

Estrutura Aninhada no C

O C nos oferece a função de aninhar uma estrutura dentro de outra, criando tipos de dados complexos. Por exemplo, pode ser necessário armazenar o endereço do funcionário em uma estrutura. E o endereço também pode conter outras informações, como o número da rua, a cidade, a região e o código postal. Portanto, para armazenar o endereço do funcionário, devemos armazenar o endereço do funcionário em uma estrutura separada e aninhar o endereço dessa estrutura no funcionário dessa estrutura. Veja o seguinte programa.

#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("Input employee information?\n");
    scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);
    printf("Imprimir informações do funcionário...\n");
    printf("Nome: %s\nCidade: %s\nNúmero: %d\nTelefone: %s", emp.name, emp.add.city, emp.add.pin, emp.add.phone);
}

Resultado da saída

Inserir informações do funcionário?
Arun            
Delhi           
110001       
1234567890    
Imprimir informações do funcionário...   
Nome: Arun      
Cidade: Delhi  
Número: 110001
Telefone: 1234567890

A estrutura pode ser aninhada da seguinte forma.

  1. Através de estruturas separadas

  2. Através da estrutura embutida

1)Estruturas separadas

Aqui, criamos duas estruturas, mas a estrutura dependente deve ser usada como membro dentro da estrutura principal. Veja o exemplo a seguir.

struct Date
{
   int dd;
   int mm;
   int yyyy; 
};
struct Employee
{   
   int id;
   char name[20];
   struct Date doj;
}}emp1;

Pode-se ver que o doj é uma variável do tipo date. Aqui, o doj é usado como membro da estrutura Employee. Dessa forma, podemos usar a estrutura Date em muitas estruturas.

2)Estrutura embutida

A estrutura embutida nos permite declarar estruturas dentro da estrutura. Portanto, ela requer menos linhas de código, mas não pode ser usada em várias estruturas de dados. Veja o exemplo a seguir.

struct Employee
{   
   int id;
   char name[20];
   struct Date
    {
      int dd;
      int mm;
      int yyyy; 
    })doj;
}}emp1;

Accessing Nested Structure

We can access the members of the nested structure using Outer_Structure.Nested_Structure.member, as shown below:

e1.doj.dd
e1.doj.mm
e1.doj.yyyy

C Nested Structure Example

Let's look at a simple example of a nested structure in C language.

#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 (
{
   //Store employee information
   e1.id =101;
   strcpy(e1.name, "Sonoo Jaiswal");//Copy a string to a character array
   e1.doj.dd =10;
   e1.doj.mm =11;
   e1.doj.yyyy =2014;
   //Print the information of the first employee
   printf("Employee ID : %d\n", e1.id);
   printf("Employee Name : %s\n", e1.name);
   printf("Employee Join Date (dd/mm/yyyy : %d/%d/%d\n", e1.doj.dd,e1.doj.mm,e1.doj.yyyy);
   return 0;
}

Output:

Employee ID : 101
Employee Name : Seagull Ali
Employee Join Date (dd/mm/yyyy : 10/11/2014

Passing Structure to Function

Just like other variables, structures can also be passed to functions. We can pass structure members to functions, or pass the structure variable itself. The following example passes the structure variable employee to the display() function, which is used to display the employee's details.

#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("Input 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("Imprimir informações do funcionário.....\n");
  printf("%s %s %d %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}