logo

Estrutura aninhada em C

C nos fornece o recurso de aninhar uma estrutura dentro de outra estrutura, usando a qual tipos de dados complexos são criados. Por exemplo, podemos precisar armazenar o endereço de um funcionário da entidade em uma estrutura. O atributo endereço também pode ter subpartes como número da rua, cidade, estado e código PIN. Portanto, para armazenar o endereço do funcionário, precisamos armazenar o endereço do funcionário em uma estrutura separada e aninhar o endereço da estrutura na estrutura do funcionário. Considere o seguinte programa.

 #include 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?
'); scanf('%s %s %d %s',emp.name,emp.add.city, &emp.add.pin, emp.add.phone); printf('Printing the employee information....
'); printf('name: %s
City: %s
Pincode: %d
Phone: %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); } 

Saída

np.mean
 Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890 

A estrutura pode ser aninhada das seguintes maneiras.

  1. Por estrutura separada
  2. Por estrutura incorporada

1) Estrutura separada

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

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

Como você pode ver, doj (data de adesão) é a variável do tipo Data. Aqui, doj é usado como membro da estrutura Employee. Desta forma, podemos usar a estrutura Date em muitas estruturas.

2) Estrutura incorporada

A estrutura incorporada nos permite declarar a estrutura dentro da estrutura. Conseqüentemente, requer menos linhas de códigos, mas não pode ser usado em múltiplas estruturas de dados. Considere o seguinte exemplo.

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

Acessando estrutura aninhada

Podemos acessar o membro da estrutura aninhada por Outer_Structure.Nested_Structure.member conforme fornecido abaixo:

par c++
 e1.doj.dd e1.doj.mm e1.doj.yyyy 

Exemplo de estrutura aninhada C

Vejamos um exemplo simples de estrutura aninhada em linguagem C.

 #include #include struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }e1; int main( ) { //storing employee information e1.id=101; strcpy(e1.name, 'Sonoo Jaiswal');//copying string into char array e1.doj.dd=10; e1.doj.mm=11; e1.doj.yyyy=2014; //printing first employee information printf( 'employee id : %d
', e1.id); printf( 'employee name : %s
', e1.name); printf( 'employee date of joining (dd/mm/yyyy) : %d/%d/%d
', e1.doj.dd,e1.doj.mm,e1.doj.yyyy); return 0; } 

Saída:

 employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014 

Passando estrutura para função

Assim como outras variáveis, uma estrutura também pode ser passada para uma função. Podemos passar os membros da estrutura para a função ou passar a variável da estrutura de uma só vez. Considere o exemplo a seguir para passar a variável de estrutura funcionário para uma função display() que é usada para exibir os detalhes de um funcionário.

 #include 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?
'); 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....
'); printf('%s %s %d %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); }