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

Présentations similaires


Présentation au sujet: "FLSI602 Génie Informatique et Réseaux"— Transcription de 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] */


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

Présentations similaires


Annonces Google