In questa lezione parleremo di puntatori a strutture in C. Il puntatore ad una struttura rappresenta una variabile che punta all’indirizzo di memoria dove la struttura (record) è allocata.
I puntatori a strutture si definiscono nello stesso modo di come si definiscono i puntatori a variabili:
typedef struct {
char cognome[20];
char nome[20];
int eta;
}studente;
studente *s; //esempio di puntatore a struttura
....
(*s).eta=25;
s->eta=25; //è equivalente
....
In questo modo è possibile memorizzare l’indirizzo di un record nella variabile puntatore.
Facciamo un esempio sui puntatori a strutture
Realizziamo un semplice programma che crea una struttura studenti che descrive gli studenti semplicemente in base al cognome e all’età. Quindi realizziamo un programma che permette l’inserimento e la visualizzazione dei dati.
#include <stdio.h>
typedef struct {
char cognome[50];
int eta;
}studente;
int main()
{
studente *sp, s1;
sp = &s1;
printf("Cognome: ");
scanf("%s", &sp->cognome);
printf("Eta': ");
scanf("%d", &sp->eta);
printf("Mostro i dati inseriti:\n");
printf("Cognome: %s\n", sp->cognome);
printf("Eta': %d", sp->eta);
return 0;
}
Come dicevamo prima, al posto di sp->cognome potrei anche scrivere: (*sp).cognome.
Secondo esempio di puntatore ad una struttura
Realizziamo un semplice programma che crea una struttura film che descrive i film in base all’id, al titolo, all’anno e alla durata. Quindi realizziamo una funzione per la stampa printFilm a cui passeremo l’indirizzo della struttura.
#include <stdio.h>
#include <string.h>
typedef struct {
int id;
char titolo[50];
int durata;
int anno;
}film;
void printFilm(film *f) {
printf( "\nId: %d\n", f->id);
printf("Film: %s\n", f->titolo);
printf( "Durata: %d\n", f->durata);
printf( "Anno: %d\n", f->anno);
}
int main() {
film f1;
film f2;
strcpy(f1.titolo,"The Imitation Game");
f1.durata=130;
f1.anno=2014;
f1.id = 976547;
strcpy(f2.titolo, "Matrix");
f2.durata=130;
f2.anno=1999;
f2.id = 976548;
/*passa l'indirizzo di f1 alla funzione printFilm */
printFilm(&f1);
printFilm(&f2 );
return 0;
}
Chiaramente questi sono solo dei semplici esempi sull’uso dei puntatori a strutture. Nelle prossime lezioni approfondiremo con altri esempi.
Alcuni link utili
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice