aboutsummaryrefslogtreecommitdiff
path: root/semestre 2/informatique/7- Structure (ou enregistrement).md
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 2/informatique/7- Structure (ou enregistrement).md')
-rw-r--r--semestre 2/informatique/7- Structure (ou enregistrement).md91
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();
+```