From 23bdfd0c3722f3be3e047d6f2457f10b9d2d3eac Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@hesge.ch>
Date: Mon, 23 Sep 2019 13:18:38 +0200
Subject: [PATCH] pointeurs avancent

---
 base_2.md | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/base_2.md b/base_2.md
index 6e455b2..c8c91cd 100644
--- a/base_2.md
+++ b/base_2.md
@@ -33,29 +33,47 @@
 
 # Les pointeurs (1/N)
 
-- Un poiteur est une adresse mémoire.
+- Un pointeur est une adresse mémoire.
 
     ```C
     type *id;
     ```
-- Pour pouvoir interprêter le contenu de ce qu'il pointe, il doit être typé.
+- Pour interprêter le contenu de ce qu'il pointe, il doit être typé.
 - Un pointeur n'est rien d'autre qu'un entier (64bit sur x86-64, soit 8 octets).
-- Un poiteur peut être **déréférencé**: on accède à la valeur sur laquelle pointe l'adresse mémoire.
+- Un pointeur peut être **déréférencé**: on accède à la valeur située à l'adresse mémoire sur laquelle il pointe.
 
     ```C
-    char val = 'a';
-    char *c = &val; // c contient l'adresse de val (pointe vers 'a')
-    char d = *c;    // d contient une copie de 'a'
+    char *c; // déclaration pointeur de char
+    *c = 'a'; // assignation de 'a' dans la valeur pointée par c
+    c = 1000; // on modifie l'adresse pointée par c
+    char d = *c; // on essaie de lire la valeur pointée par c... argl!
     ```
 
+- `NULL`{.C} (ou `0`{.C}) est la seule adresse **toujours** invalide.
+
 # Les pointeurs (2/N)
 
 ![Les pointeurs, le déréférencement, et la mémoire.](figs/memory_deref.svg){#fig:memory width=100%}
 
+# Les pointeurs (3/N)
+
+- Permettent d'accéder à une valeur avec une indirection.
+
+    ```C
+    int a = 2;
+    int *b = &a;
+    *b = 7; // on met 7 dans la case pointée par b
+            // ici  a == 7 aussi
+    a = -2; // ici *b == -2 aussi
+    ```
+
+- Permettent d'avoir plusieurs chemins d'accès à une valeur.
+- Lire **et** écrire en même temps dans un bout de mémoire devient possible: **danger**.
+
 
 # Les fonctions (1/N)
 
-- Chaque partie indépendante d'un programme se met dans une fonction.
+- Les parties indépendantes d'un programme sont mises dans des fonctions.
 - Syntaxe:
 
     ```C
-- 
GitLab