diff options
Diffstat (limited to 'semestre 2/informatique/7- Structure (ou enregistrement).md')
| -rw-r--r-- | semestre 2/informatique/7- Structure (ou enregistrement).md | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/semestre 2/informatique/7- Structure (ou enregistrement).md b/semestre 2/informatique/7- Structure (ou enregistrement).md new file mode 100644 index 0000000..d06d805 --- /dev/null +++ b/semestre 2/informatique/7- Structure (ou enregistrement).md @@ -0,0 +1,91 @@ +--- +tags: + - sorbonne + - informatique +semestre: 2 +--- +Pour organiser les données, on utilise `struct` +```c +struct s_int_pair { + int fst; + int snd; +}; // vraiment utile le ; ? +``` +Est toujours au début du fichier `.c` ou dans le `.h` si elle est utilisée par plusieurs fichiers +|> possède deux champs nommés `fst` et `snd` + +Les fichiers headers (`.h`) spécifient les interfaces utilisables par l'extérieur du fichier C +|> contient les struct publics, les functions publiques... +|> ne contient pas tout ce qui est privé + +Pour qu'une variable utilise un struct, on écrit +```c +struct s_int_pair point; +``` +sauf que c'est long à écrire, donc on renomme tout ça avec un `typedef` : +```c +typedef struct s_int_pair int_pair; +int main(){ + int_pair point; + return 0; +} +``` +on peut aussi tout définir d'un coup +```c +typedef struct s_int_pair{ + int fst; + int snd; +} int_pair; +``` + +> [!NOTE] Nom de la structure et nom du type associé +> Souvent, on nomme `_ABC` le nom de la structure et `ABC` le nom du type associé +> |> permet d'avoir un nom similaire mais différent +> |> est une convention + +Pour initialiser un struct, on utilise les parenthèses +```c +int_pair p = {1,2}; // initialisation séquentielle +int_pair p2 = {.snd=3, .fst=4}; // initialisation sélective +``` +la première est traditionnelle et est commune + +Pour modifier les valeurs dans un struct, on accède aux champs avec l'opérateur `.` : +```c +p.fst = -1; +p.snd = -2; + +p = p2; // copie la structure p2 dans p +``` + +*voir le cours pour la représentation dans le stack* + +Quand on définit une structure, on peut perdre de la mémoire, notamment si on utilise pas tout un octet + +Structures et fonctions +|> on peut retourner des structures depuis des fonctions sans aucun problème (pas besoin de faire un `malloc`) +|> il n'y a pas d'effet de bord quand on utilise des structures dans une fonctions -> on a besoin d'utiliser un pointeur pour en réaliser un + +Il n'existe pas d'arithmétique des structures + +On peut chaîner les structures, i.e. +```c +struct _cell { + int v; + struct cell* next; +} +``` +(ce qui donne une liste chaînée) + +L'opérateur `->` est un raccourcie permettant le déférencement rapide +```c +Foo *foo; + +foo->bar = 10; +// est équivalent à +(*foo).bar = 10; + +foo->baz(); +// est équivalent à +(*foo).baz(); +``` |
