0% ont trouvé ce document utile (0 vote)
56 vues24 pages

Part 8

Ce document décrit les pointeurs génériques et la gestion dynamique de la mémoire en C. Il explique les pointeurs void, le transtypage, l'arithmétique des pointeurs, les pointeurs et tableaux, ainsi que les fonctions malloc, calloc, realloc et free.

Transféré par

Marcelin Soukroumde
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
56 vues24 pages

Part 8

Ce document décrit les pointeurs génériques et la gestion dynamique de la mémoire en C. Il explique les pointeurs void, le transtypage, l'arithmétique des pointeurs, les pointeurs et tableaux, ainsi que les fonctions malloc, calloc, realloc et free.

Transféré par

Marcelin Soukroumde
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

POINTEURS GÉNÉRIQUES

Le type void
▪ Un pointeur sur void est considéré comme un pointeur
générique, ce qui signifie qu’il peut référencer n’importe quel
type d’objet.

▪ Dans certaines circonstances, on veut:


▪ Manipuler une adresse.
▪ Sans indiquer le type des éléments pointés.

▪ Pointeur non typé


▪ Le langage C permet de manipuler des pointeurs non typés.

1
POINTEURS GÉNÉRIQUES
▪ Syntaxe:
void* pointeur;
int i;
double x;
pointeur = &i;
pointeur = &x;

▪ Exemple:
int fread (void* buffer, int size, int count);

2
TRANSTYPAGE
▪ Un pointeur void * est inutilisable.
➢ Pour lire ou écrire ce qui est pointé, il faut préciser le type
des éléments pointés.
➢ On change le type du pointeur par transtypage (type cast).
✓ (int*) pointeur;
➢ L’adresse reste inchangée.
➢ Le type des éléments pointés devient connu.

▪ Le transtypage est possible


➢ Entre tous les types de pointeurs.
➢ Il est aussi possible de transtyper un entier en pointeur et
vice versa. 3
TRANSTYPAGE
Exemple:

4
ARITHMÉTIQUE DES POINTEURS

▪ Deux opérateurs possibles :


➢ Somme d’un pointeur est un entier
➢ Différence entre deux pointeurs de même type.

▪ Syntaxe :
type *p, *q; int i;
✓ p+i
➢ C’est l’adresse de la case d’indice i de l’espace pointé par p
➢ Sa valeur = p + i*sizeof(type)
✓ q–p
➢ C’est le nombre de cases entre l’adresse p et l’adresse p
➢ Sa valeur = (q - p)/sizeof(type)

5
POINTEURS ET TABLEAUX

▪ Un tableau à une dimension est un pointeur sur un ensemble


d’éléments de même type contigües en mémoire.
▪ int T[N] ;
▪ T est l’adresse de la première case du tableau
▪ L’adresse de la case d’indice i est &T[i]
▪ C’est aussi T+i
▪ Le contenu de la case d’indice i est T[i]
▪ C’est aussi *(T+i)

6
POINTEURS ET TABLEAUX

▪ Un tableau à une dimension est un pointeur sur un ensemble


d’éléments de même type contigües en mémoire.
▪ int T[N] ;
▪ T est l’adresse de la première case du tableau
▪ L’adresse de la case d’indice i est &T[i]
▪ C’est aussi T+i
▪ Le contenu de la case d’indice i est T[i]
▪ C’est aussi *(T+i)

7
POINTEURS ET TABLEAUX

Exemple:

8
POINTEURS ET STRING
▪ Fonctions de <string.h>

Plus de fonctions: [Link]

9
POINTEURS ET STRING
Exemple:

10
Gestion dynamique de la mémoire

11
INTRODUCTION

12
MÉMOIRE DYNAMIQUE

▪ Comment réserver de l’espace mémoire pendant l’exécution d’un


programme?
➢ la taille de l’espace mémoire est définie au moment de
l’exécution.
▪ Comment créer des structures de données dynamiques?
▪ Les fonctions de stdlib.h de gestion dynamique de la mémoire:
▪ malloc
▪ calloc
▪ realloc
▪ free

13
MÉMOIRE DYNAMIQUE

▪ Etapes :
➢ Allocation : appel de malloc ou calloc pour demander à l’OS
de l’espace mémoire.
➢ Vérification : si l’espace mémoire est bien réservé.
➢ Utilisation : utilisation de l’espace mémoire réservé, et
redimensionnement avec realloc si nécessaire.
➢ Libération: appel de free pour libérer l’espace mémoire

14
RÉSERVATION

La fonction malloc
▪ void * malloc (size_t size)
➢ size_t est un unsigned int
➢ Permet de réserver un espace mémoire avec une taille donnée
en octets.
➢ Retourne un pointeur sur l’espace mémoire réservé en cas de
succès.
➢ En cas d’échec de réservation, la fonction retourne un
pointeur nul (NULL).
➢ L’espace mémoire réservé n’est pas initialisé.

15
RÉSERVATION

▪ void * malloc (size_t size)


▪ Exemples :
▪ float *t = malloc(10*sizeof(float));
➢ Réservation d’un espace mémoire pour stocker
10 float (un tableau)

16
RÉSERVATION

La fonction calloc
▪ void * calloc (size_t num , size_t size)
➢ Réserve l’espace mémoire pour un tableau avec un nombre
d’éléments et la taille de chaque élément donnés, et initialise
l’espace mémoire par 0.
➢ Retourne un pointeur sur l’espace mémoire réservé en cas de
succès.
➢ En cas d’échec de réservation, la fonction retourne un pointeur
nul (NULL).

17
RÉSERVATION

▪ void * calloc (size_t num , size_t size)


▪ Exemples :
▪ float * t = calloc(10, sizeof(float));
➢ Réservation d’un espace mémoire pour stocker
10 float (un tableau)

18
REDIMENSIONNEMENT

La fonction realloc
▪ void * realloc (void *ptr, size_t new_size)
➢ Réallouer un espace mémoire pointé par ptr avec une nouvelle
taille.
➢ La réallocation peut étendre ou réduire l’espace mémoire.

19
REDIMENSIONNEMENT

▪ void * realloc (void *ptr, size_t new_size)


▪ Exemple :
▪ float * p = calloc(10, sizeof(float));
▪ p = realloc (p, 15*sizeof(float));
➢ Extension de l’espace mémoire pour 15 float.

20
LIBÉRATION

La fonction free
▪ void free (void * ptr)
➢ Libère l'espace mémoire précédemment alloué par malloc,
calloc ou realloc.
➢ Si ptr est nul, la fonction ne fait rien.
➢ La fonction ne retourne rien.
▪ Exemple :
▪ free(p);
▪ Libère l’espace mémoire pointé par p.

21
TABLEAUX À UNE DIMENTION

22
TABLEAUX À DEUX DIMENTION
Méthode 1

23
TABLEAUX À DEUX DIMENTION
Méthode 2

24

Vous aimerez peut-être aussi