La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

FLSI602 Génie Informatique et Réseaux Alberto Bosio

Présentations similaires


Présentation au sujet: "FLSI602 Génie Informatique et Réseaux Alberto Bosio"— Transcription de la présentation:

1 FLSI602 Génie Informatique et Réseaux Alberto Bosio

2 2 Les pointeurs Définition dun pointeur Un pointeur est une variable contenant des adresses demplacements mémoires On dit dun pointeur bien initialisé, quil 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 ladresse de la variable X */ *P = 6; /* Est équivalent à X = 6 */

3 3 Allocation dynamique de mémoire La fonction « malloc » permet de réserver un emplacement mémoire Si possible, la fonction malloc retourne ladresse de lemplacement réservé Si la mémoire est saturée, la fonction malloc retourne la valeur NULL La fonction « sizeof » retourne la taille de lespace mémoire occupé par une variable de type donné La fonction « free » permet de libérer un espace mémoire réservé

4 4 Exemple #include /* On place dans P ladresse dun 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 lentier 5 dans lemplacement pointé par P */ *P = 5; /* On libère lemplacement pointé par P grâce à la fonction */ free (P); }

5 5 Manipulations de base int *P, *Q; /* Déclaration de deux pointeurs */ int X; /* Déclaration dune variable standard */

6 6 Manipulations de base P = &X; /* Allocation statique */ *P = 6;/* Affectation indirecte de X */ printf (%d,X); /* Affiche 6 */

7 7 Manipulations de base P = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *P = 7; /* Initialisation de lemplacement pointé par P */ printf (%d,*P); /* Affiche 7 */

8 8 Manipulations de base Q = P; /* Copie du contenu dun pointeur */

9 9 Manipulations de base Q = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *Q = *P + 1; /* Initialisation de lemplacement pointé par Q */ P = NULL; /* Emplacement pointé par P perdu */ free (Q); /* Libération correcte */ Q = NULL; /* Affectation non automatique */

10 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 lemplacement pointé par P et Q */

11 11 Problème de gestion mémoire free (P); /* Libération de lemplacement*/ P = NULL; /* pointé par P -> et Q DANGER - DANGER - DANGER Q pointe sur un emplacement non réservé*/

12 12 Allocation dynamique de tableaux const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i

13 13 Allocation dynamique de tableaux const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i

14 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

15 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

16 16 Allocation dynamique de tableaux int N; int *pT; printf ( "Insert the size : ); scanf (%d,&N); pT = (int*) malloc (sizeof (int)*N);

17 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

19 19 Allocation dynamique de tableaux free (pT); /* Libération du tableau */ pT = NULL;

20 20 Modes de transmission des arguments Par adresses void echanger(int* pa, int* pb) { int tmp = *pa; *pa = *pb; *pb = tmp; }

21 21 Modes de transmission des arguments Transmission de tableaux Toujours par adresses, le nom dun tableau représentant : son adresse mémoire ladresse 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] */ }


Télécharger ppt "FLSI602 Génie Informatique et Réseaux Alberto Bosio"

Présentations similaires


Annonces Google