Télécharger la présentation
1
FLSI602 Génie Informatique et Réseaux
Alberto Bosio
2
Les pointeurs Définition d’un pointeur Allocation statique
Un pointeur est une variable contenant des adresses d’emplacements mémoires On dit d’un pointeur bien initialisé, qu’il pointe sur un emplacement mémoire int *pI1, *pI2; double *pD; Allocation statique Avant toute chose, un pointeur doit être initialisé int X; int *P; P = &X; /* P contient l’adresse de la variable X */ *P = 6; /* Est équivalent à X = 6 */
3
Allocation dynamique de mémoire
La fonction « malloc » permet de réserver un emplacement mémoire Si possible, la fonction malloc retourne l’adresse de l’emplacement réservé Si la mémoire est saturée, la fonction malloc retourne la valeur NULL La fonction « sizeof » retourne la taille de l’espace mémoire occupé par une variable de type donné La fonction « free » permet de libérer un espace mémoire réservé
4
Exemple #include <stdlib.h>
/* On place dans P l’adresse d’un emplacement mémoire pouvant contenir un entier */ int *P; /* déclaration */ P = (int*) malloc (sizeof(int)); /* allocation */ if (P == NULL) printf ( “Memory Allocation Error \n”); else { /* On place l’entier 5 dans l’emplacement pointé par P */ *P = 5; /* On libère l’emplacement pointé par P grâce à la fonction */ free (P); }
5
Manipulations de base int *P, *Q; /* Déclaration de deux pointeurs */
int X; /* Déclaration d’une variable standard */
6
Manipulations de base P = &X; /* Allocation statique */
*P = 6;/* Affectation indirecte de X */ printf (“%d” ,X); /* Affiche 6 */
7
Manipulations de base printf (“%d” ,*P); /* Affiche 7 */
P = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *P = 7; /* Initialisation de l’emplacement pointé par P */ printf (“%d” ,*P); /* Affiche 7 */
8
Manipulations de base Q = P; /* Copie du contenu d’un pointeur */
9
Manipulations de base Q = (int*) malloc (sizeof (int));
/* Allocation dynamique */ *Q = *P + 1; /* Initialisation de l’emplacement pointé par Q */ P = NULL; /* Emplacement pointé par P perdu */ free (Q); /* Libération correcte */ Q = NULL; /* Affectation non automatique */
10
Problème de gestion mémoire
int *P, *Q; /* Déclaration de deux pointeurs */ P = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *P = 1; Q = P; /* Copie de pointeur */ *Q = *Q + 2; /* Modification de l’emplacement pointé par P et Q */
11
Problème de gestion mémoire
free (P); /* Libération de l’emplacement*/ P = NULL; /* pointé par P -> et Q DANGER - DANGER - DANGER Q pointe sur un emplacement non réservé*/
12
Allocation dynamique de tableaux
const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i<N; i++) T[i] = 2*i;
13
Allocation dynamique de tableaux
const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i<N; i++) T[i] = 2*i; La taille du tableaux doit être constant
14
Allocation dynamique de tableaux
int N; int T[N],i; void main (void) { printf ( "Insert the size : ”); scanf (”%d”,&N); for(i=0; i<N; i++) T[i] = 2*i; }
15
Allocation dynamique de tableaux
int N; int T[N],i; void main (void) { printf ( "Insert the size : ”); scanf (”%d”,&N); for(i=0; i<N; i++) T[i] = 2*i; }
16
Allocation dynamique de tableaux
int N; int *pT; printf ( "Insert the size : ”); scanf (”%d”,&N); pT = (int*) malloc (sizeof (int)*N);
17
Allocation dynamique de tableaux
int N; int *pT; printf ( "Insert the size : ”); scanf (”%d”,&N); pT = (int*) malloc (sizeof (int)*N); Dans ce cas N = 3
18
Allocation dynamique de tableaux
for(i=0; i<N; i++) /* Utilisation du tableau */ pT[i] = T[i] + 1;
19
Allocation dynamique de tableaux
free (pT); /* Libération du tableau */ pT = NULL;
20
Modes de transmission des arguments
Par adresses void echanger(int* pa, int* pb) { int tmp = *pa; *pa = *pb; *pb = tmp; }
21
Modes de transmission des arguments
Transmission de tableaux Toujours par adresses, le nom d’un tableau représentant : son adresse mémoire l’adresse de son premier élément void initialiser(int *pT, int n) { for(int i = 0; i < n; i++) pT[i] = i; } void main() { int x[3]; initialiser(x, 3); /* pT = x = &x[0] */
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.