Structures

Une structure est un type dérivé permettant de regrouper des données de type hétérogène. Par exemple, on définie une structure personne :

struct personne {
  char *prénom;
  int age;
};

Pour créer une variable de cette structure, comme ce n'est ni un type reconnu ni un typedef il faut :

struct personne x = {"Chun-Li", 55};

On peut ensuite accéder à chaque élément avec une notation pointée :

#include <stdio.h>

int main() {

struct personne {
    char *prenom;
    int age;
};

struct personne x = { "Chun-Li", 55};

printf("%s\n", x.prenom);
printf("%d\n", x.age);

}

Il est bien sur possible de modifier les variables après la création :

#include <stdio.h>

int main() {

struct personne {
    char *prenom;
    int age;
};

struct personne x = { "", 0};

x.prenom = "Ken";
x.age = 58;

printf("%s\n", x.prenom);
printf("%d\n", x.age);

}

Pour ne pas avoir à retaper struct avant chaque création, on a l'habitude de passer par un typedef : typedef struct personne personne;,
pour ensuite directement créer une personne par : personne x = {"", 0};.

On peut aussi tout faire en une fois et la déclaration du struct et le typedef :

#include <stdio.h>

int main() {

typedef struct personne {
        char *prenom;
        int age;
} personne;

personne x = { "Chun-Li", 55};

printf("%s\n", x.prenom);
printf("%d\n", x.age);

}

On peut utiliser un struct dans un tableau, comme tout autre type, ou via un pointeur :

personne ken = {"Ken", 56};
personne *p = &ken;

Utiliser un pointeur pour accéder à une structure étant tellement utilisée qu'il existe un raccourci : on peut écrire p->x à la place de (*p).x, ce qui est plus clair.

#include <stdio.h>

typedef struct personne {
        char *prenom;
        int age;
} personne;

int main() {
    personne chun_li = { "Chun-Li", 55};
    personne ken = { "Ken", 56};

    personne t[2];
    t[0] = chun_li;
    t[1] = ken;

    personne *personne_p = NULL;

    printf("Combatants de Street Fighter :\n");

    personne_p = t;
    for (size_t i=0 ; i < 2 ; i++) {
        printf("Prénom : %s (%i ans)\n", 
            personne_p->prenom, personne_p->age);
        personne_p++;
    }


}