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