English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
attraverso strutture separate
attraverso le strutture embedded
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.
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;
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
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
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); {}