Programmazione · 7 min read · Oct 10, 2025
Apprendimento C/C++ Passo-Passo - Pagina 10
10. Passo-Passo C/C++ — Programmazione C - Struttura
Strutture
| | 1. Introduzione
- Dichiarazione di Struttura
- Definizione di una Variabile Struttura
- Inizializzazione di una Variabile Struttura
- Assegnazione diretta di strutture
- Calcolo della dimensione della Struttura
- Strutture Annidate
- Array di Strutture
- Array all’interno delle Strutture
- Passaggio delle Strutture a Funzione
- Restituzione delle Strutture dalle Funzioni
- Puntatore a struttura
- Struttura contenente Puntatori
- Strutture Auto-Riferite |
1. Introduzione
| | int a[4] = { 3, 4, 5, 6 }; / Espressione valida /
int a[4] = { 3, 4.23, 5, 6 }; / Espressione non valida /
int a[4] = { 3, “Siglov”, 5,3} / Espressione non valida / |
Perché le ultime due espressioni non sono valide? Un array può memorizzare valori dello stesso tipo. Deve essere dello stesso tipo. Mentre una struttura può contenere più di un tipo di dati secondo la sua definizione.
| | • Un gruppo di una o più variabili di diversi tipi di dati organizzati insieme sotto un unico nome è chiamato struttura o
• Una collezione di tipi di dati eterogenei (dissimili) raggruppati insieme sotto un unico nome è chiamata struttura o
• Una struttura è una collezione di variabili semplici. La variabile in una struttura può essere di diversi tipi. Gli elementi dati in una struttura sono chiamati membri delle strutture. |
2. Dichiarazione di una struttura
Quando una struttura è definita, l’intero gruppo è referenziato attraverso il nome della struttura. I singoli componenti presenti nella struttura sono chiamati membri della struttura e questi possono essere accessibili e processati separatamente.
| |
|
Es:
| | struct date
{
int day;
int month;
int year;
}; | struct student
{
int sno;
char name[20];
int marks;
float avg;
}; |
3. Definizione di una Variabile Struttura
Definire una variabile struttura è lo stesso che definire un tipo di dato incorporato come int.
| | int a; / valido /
date d; / valido (ma solo in C++) /
struct date d; / valido sia in C che in C++ / |
4. Inizializzazione di una Variabile Struttura
I membri della struttura possono essere inizializzati come altre variabili. Questo può essere fatto al momento della dichiarazione o al momento della progettazione.
| 1. Inizializzazione alla Dichiarazione:
struct ddate
{
int day;
int month;
int year;
} d = { 27, 10, 2000 }; | 2. Inizializzazione alla Definizione:
struct ddate d = { 27, 10, 2000 }; | | 1. Inizializzazione al momento della progettazione: ddate d;
d.day = 27;
d.month = 10;
d.year = 2000; | 4. Inizializzazione al momento dell’esecuzione:
scanf(“%d%d%d”, &d.day, &d.month, &d.year); |
Es:
| | / Scrivi un programma per accettare e stampare i dettagli di un dipendente /
/ 73_struct.c /
#include
struct emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct emp e;
printf(“Inserisci il numero del dipendente :”); scanf(“%d”, &e.eno);
printf(“Inserisci il nome del dipendente :”); scanf(“%s”, e.name);
printf(“Inserisci lo stipendio del dipendente :”); scanf(“%d”, &e.sal);
printf(“\n\nI dettagli del dipendente sono i seguenti…. “);
printf(“%d %s %d”, e.eno, e.name, e.sal);
return 0;
} |
5. Assegnazione diretta di strutture
L’assegnazione diretta di più di una variabile è resa possibile utilizzando strutture.
| | struct emp a, b = {1001, “Vimal”, 6700.00 };
a = b; / Valido /
printf(“%d %s %d” , a.eno, a.name, a.sal ); | | | Output:
1001 Vimal 6700.00 |
6. Calcolo della dimensione della struttura
Ogni tipo di dato in C/C++ ha una dimensione specificata, cioè int ha 2 byte di dimensione, float ha 4 byte di dimensione e così via. Ecco il modo per trovare la dimensione di una variabile struttura.
sizeof:- Questa funzione è utilizzata per trovare la dimensione di una variabile data.
| | printf(“%d”, sizeof(int)); / 2 /
printf(“%d”, sizeof(float)); / 4 /
printf(“%d”, sizeof(struct emp)); / Mostra la dimensione della struttura emp / |
7. Strutture Annidate
Struttura all’interno di strutture è conosciuta come strutture annidate. Per accedere ai membri della struttura annidata dobbiamo applicare l’operatore punto due volte nel chiamare i membri della struttura.
Es:
| | / programma per dimostrare la struttura annidata con la struttura del dipendente /
/ 74_nested.c /
#include
struct emp
{
int eno;
char name[10];
float sal;
struct / Struttura Annidata /
{
street char[10];
city char[10];
} addr;
};
int main()
{
struct emp e;
printf(“Inserisci emp_no, emp_name, emp_sal, street, city “);
scanf(“%d%s%d%s%s”, &e.eno, e.name, &e.sal, e.addr.street, e.addr.city );
printf(“\n\nI dettagli del dipendente sono i seguenti …. “);
printf(“%d%s%d%s%s”, e.eno, e.name, e.sal, e.addr.street, e.addr.city );
return 0;
} |
8. Array di Strutture
Possiamo creare un array di strutture. L’array avrà strutture individuali come suoi elementi.
| | / Scrivi un programma per accettare e stampare i dettagli di un dipendente /
/ 75_array.c /
#include
struct emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct emp e [10];
int i;
for(i = 0; i<10; i++)
{
printf(“Inserisci il numero del dipendente :”); scanf(“%d”, &e [i].eno);
printf(“Inserisci il nome del dipendente :”); scanf(“%s”, e [i].name);
printf(“Inserisci lo stipendio del dipendente :”); scanf(“%d”, &e [i].sal);
}
printf(“\n\nI dettagli del dipendente sono i seguenti…. “);
for(i = 0; i<10; i++)
printf(“%d %s %d”, e [i].eno, e [i].name, e [i].sal);
return 0;
} |
Niente è nuovo nel programma sopra. L’intero programma è lo stesso di un semplice programma strutturato tranne i dati contrassegnati.
9. Array all’interno delle Strutture
Potrebbe esserci una situazione in cui utilizzare array all’interno delle strutture. Come raggiungere array all’interno delle strutture. Ecco l’approccio con un programma semplice.
| | / Programma per accettare e stampare le informazioni di uno studente /
/ 76_array.c /
#include
struct stud
{
int sno;
char name[10];
int marks[5]; / Array all’interno della struttura /
};
int main()
{
struct stud s;
int i;
printf(“Inserisci il numero dello studente “); scanf(“%d”, &s.sno);
printf(“Inserisci il nome dello studente “); scanf(“%d”, s.name);
for( i = 0; i<3; i++)
{
printf(“Inserisci i voti dello studente “); scanf(“%d”, &s.marks[i]);
}
printf(“\n\nI registri degli studenti sono i seguenti…. “);
printf(“%d %s %d %d %d”, s.sno, s.name, s.marks[0], s.marks[1], s.marks[2] );
return 0;
} |
10. Passaggio delle Strutture a Funzioni
È possibile inviare intere strutture a funzioni come argomenti nella chiamata della funzione. La variabile struttura è trattata come qualsiasi variabile ordinaria.
| | / Programma per passare una variabile struttura a una funzione /
/ 77_funct.c /
#include
struct emp
{
int eno;
char name[10];
float sal;
};
void display(struct emp temp);
int main()
{
struct emp e;
display(e);
return 0;
}
void display(struct emp temp)
{
printf(“%d %s %d”, temp.eno, temp.name, temp.sal );
} |
11. Restituzione delle Strutture dalle funzioni
Possiamo restituire strutture dalle funzioni. Sì, le strutture possono essere restituite dalle funzioni proprio come variabili di qualsiasi altro tipo.
| | / Restituzione dell’oggetto struttura da una funzione /
/ 78_funct.c /
struct emprec
{
int eno;
char name[10];
};
struct emprec read();
void write(struct emprec t);
int main()
{
struct emprec e;
e = read();
write(e);
return 0;
}
void write(struct emprec t)
{
printf(“\n\n%d %s”, t.eno, t.name);
}
struct emprec read()
{
struct emprec t;
printf(“Inserisci il numero del dipendente :”); scanf(“%d”, &t.eno);
printf(“Inserisci il nome del dipendente :”); scanf(“%s”, t.name);
return t;
} |
12. Puntatore a Struttura
Fino ad ora abbiamo visto che i membri di una struttura possono essere di tipi di dati come int, char, float o anche struttura. Il linguaggio C/C++ consente anche di dichiarare una variabile puntatore come membro di una struttura. Le variabili puntatore possono essere utilizzate per memorizzare l’indirizzo di una variabile struttura. Un puntatore può essere dichiarato come se puntasse a un tipo di dato struttura.
| | / Programma per dimostrare il processo di Puntatore a struttura /
/ 79_pointer.c /
#include
struct employee
{
int eno;
char name[10];
};
struct employee emp;
int main()
{
emp = (struct employee )malloc(sizeof(emp));
printf(“Inserisci i dettagli del dipendente ..”);
scanf(“%d%s%”, &emp->eno, emp->name);
printf(“\n\n%d %s”, emp->eno, emp->name);
return 0;
} |
I dati contrassegnati sono essenziali per implementare il puntatore a struttura.
La seguente istruzione è facoltativa, ma è meglio utilizzarla per organizzare una migliore gestione della memoria.
emp = (struct employee * )malloc(sizeof(emp));
13. Strutture Contenenti Puntatori
Una variabile puntatore può anche essere utilizzata come membro nella struttura.
Il seguente programma contiene membri puntatore contenuti da una variabile puntatore di struttura.
| | / programma per dimostrare l’uso di strutture contenenti Puntatori /
/ 80_pointers.c /
#include
struct
{
int a;
int b;
} *temp;
int main()
{
int x, y;
x = 20; y = 50;
rk -> a = &x;
rk -> b = &y;
printf(“%d %d “, temp->a, temp->b );
return 0;
} | | | output:
20 50 |
14. Strutture Auto-Riferite
Le strutture possono avere membri, che sono dello stesso tipo della stessa struttura in cui sono inclusi. Questo è possibile con i puntatori e il fenomeno è chiamato strutture auto-riferite.
| | struct emp
{
int eno;
char name[10];
struct emp *e;
}; |
Le strutture auto-riferite possono essere utilizzate principalmente per organizzare dati, ordinare, cercare elementi, inserire, eliminare elementi e così via.
Questo modo di approccio porta a Strutture Dati (cioè, Liste Collegate, Stack, Code, Alberi e Grafi).
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.