libri-javascript-python

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

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C