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) {#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