Struct in C

Scopriamo cos’è una struct e come utilizzarla per ottimizzare il nostro codice.

Punto medio di un segmento

Proviamo a scrivere un programma che trova il punto medio di un segmento in un piano cartesiano.

#include <stdio.h>

int main(){
    //PRIMO PUNTO
    double x1 = 10;
    double y1 = 10;

    //SECONDO PUNTO
    double x2 = 20;
    double y2 = 5;

    //PUNTO MEDIO
    double xMedio = ( x1 + x2 ) / 2;
    double yMedio = ( y1 + y2 ) / 2;

    //OUTPUT
    printf("Coordinate punto medio: X = %lf , Y = %lf ",xMedio,yMedio);

    return 0;
}

Il programma che abbiamo scritto è perfettamente funzionante, infatti il risultato è:

Coordinate punto Medio: X = 15.00 , Y = 7.50

Esiste però un modo migliore per scrivere questo programma ed è il seguente.

#include <stdio.h>

//DEFINIZIONE STRUCT
struct punto {
	double x;
	double y;
};

int main(){
    //PRIMO PUNTO
    struct punto p1;
    p1.x = 10;
    p1.y = 10;

    //SECONDO PUNTO
    struct punto p2;
    p2.x = 20;
    p2.y = 5;

    //PUNTO MEDIO
    struct punto medio;
    medio.x = ( p1.x + p2.x ) / 2;
    medio.y = ( p1.y + p2.y ) / 2;

    //OUTPUT
    printf("Coordinate punto medio: X = %lf , Y = %lf ",medio.x,medio.y);

    return 0;
}

Utilizzare le struct aiuta quando il codice comincia a diventare più complicato. Se per esempio dobbiamo rappresentare una serie di 100 punti in un piano cartesiano:

//SENZA STRUCT

double xPunti[100];
double yPunti[100];


//CON STRUCT
struct punto {
  double x;
  double y;
};

struct punto punti[100];

Qui risulterà molto più utile utilizzare una struct.

Cos’è una struct?

Una struct o struct è una macrovariabile che al suo interno contiene tante variabili, anche di tipo diverso.

dichiarazione struct c

Le struct non hanno un tipo, ma possiamo definirne uno nuovo con l’istruzione typedef.

definizione tipo struct C con typedef

Come utilizzare una struct?

Utilizzando typedef possiamo utilizzare una struct come un tipo semplice (int, double, char). L’utilizzo di una struct è identico a quello di una variabile.

struct c

Una struct al suo interno può contenere qualsiasi tipo di variabile, anche un’altra struct.

struct punto {
    double x;
    double y;
};

struct caratteristiche {
    double altezza;
    double peso;
    char sesso;
};

struct pagella{
    double voti[10];
    double media;
};

struct linea{
    struct punto p1;
    struct punto p2;
    double lunghezza;
};

Ecco come le struct ci permettono di definire variabili complesse e allo stesso tempo mantenere leggibile il codice!