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

Corso di base del linguaggio C

Controllo di flusso del linguaggio C

C语言函数

C语言数组

C语言指针

C语言字符串

Struttura del linguaggio C

File del linguaggio C

C altri

Manuale di riferimento del linguaggio C

C语言嵌套结构体

C ci fornisce la funzione di annidare una struttura all'interno di un'altra, creando così tipi di dati complessi. Ad esempio, potremmo dover memorizzare l'indirizzo effettivo di un impiegato all'interno della struttura. L'indirizzo può contenere altre informazioni, come il numero di strada, la città, la regione e il codice postale. Pertanto, per memorizzare l'indirizzo dell'impiegato, dobbiamo memorizzare l'indirizzo dell'impiegato in una struttura separata e annidare l'indirizzo di questa struttura all'interno della struttura dell'impiegato. Ecco il programma.

#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("Inserisci le informazioni dell'impiegato?\n");
    scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);
    printf("Stampare le informazioni dell'impiegato...\n");
    printf("Nome: %s\nCittà: %s\nCodice P: %d\nTelefono: %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
{}

Risultato di output

Inserire le informazioni dell'impiegato?
Arun            
Delhi           
110001       
1234567890    
Stampare le informazioni dell'impiegato...   
Nome: Arun      
Città: Delhi  
Codice: 110001
Telefono: 1234567890

Questa struttura può essere annidata nel modo seguente.

  1. attraverso strutture separate

  2. attraverso le strutture embedded

1) Strutture separate

Qui abbiamo creato due strutture, ma la struttura dipendente dovrebbe essere utilizzata come membro nella struttura principale. Ecco un esempio.

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

Si può vedere che doj è una variabile di tipo date. Qui, doj viene utilizzato come membro della struttura Employee. In questo modo, possiamo utilizzare la struttura Date in molte strutture.

2) Strutture embedded

Le strutture embedded ci permettono di dichiarare strutture all'interno della struttura. Pertanto, richiedono meno righe di codice, ma non possono essere utilizzate in più strutture dati. Ecco un esempio.

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

Accesso alla struttura annidata

Possiamo accedere ai membri della struttura annidata tramite Outer_Structure.Nested_Structure.member, come mostrato di seguito:

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

Esempio di struttura annidata in C

Guardiamo un esempio semplice di struttura annidata in 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 (
{
   //Salva le informazioni dell'impiegato
   e1.id=101;
   strcpy(e1.name, "Sonoo Jaiswal"); // Copia la stringa nell'array di caratteri
   e1.doj.dd=10;
   e1.doj.mm=11;
   e1.doj.yyyy=2014;
   //Stampa le informazioni del primo impiegato
   printf("ID dell'impiegato : %d\n", e1.id);
   printf("Nome dell'impiegato : %s\n", e1.name);
   printf("Data di entrata dell'impiegato (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd,e1.doj.mm,e1.doj.yyyy);
   return 0;
{}

Output:

ID dell'impiegato : 101
Nome dell'impiegato : Seagull Ali
Data di entrata dell'impiegato (dd/mm/yyyy) : 10/11/2014

Passaggio di struttura a funzione

Come altre variabili, anche le strutture possono essere passate a una funzione. Possiamo passare aiuta membri di una struttura a una funzione, o passare l'intera variabile di struttura. L'esempio seguente passerà la variabile di struttura employee alla funzione display(), che viene utilizzata per visualizzare i dettagli dell'impiegato.

#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("Inserisci le informazioni dell'impiegato?\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);
{}