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

GEF 243B Programmation informatique appliquée Modèle de mémoire et arithmétique de pointeurs §10.2.

Présentations similaires


Présentation au sujet: "GEF 243B Programmation informatique appliquée Modèle de mémoire et arithmétique de pointeurs §10.2."— Transcription de la présentation:

1 GEF 243B Programmation informatique appliquée Modèle de mémoire et arithmétique de pointeurs §10.2

2 21-Jan-14 2 JGA Beaulieu Revue Quest-ce que le masquage dinformation? Dans le langage C, quel fichier est linterface du module? Pourquoi on lappel interface?

3 21-Jan-14 3 JGA Beaulieu Review Quest que cela va imprimer? 1.#include 2.void main (void) 3.{ 4.int a[5]={22, 4, 61, 8, 2} 5.int* p; 6.int* r; 7.p = &a[2] 8.r = &a[4] 9.if (*p > *r) 10.printf(Twiddle-dee); 11.else 12.printf(Twiddle-dum); 13. }

4 21-Jan-14 4 JGA Beaulieu Synopsis Modèle de mémoire pour un programme en C Arithmétique de Pointeur

5 21-Jan-14 5 JGA Beaulieu Modèle de mémoire Un programme en C a quatre segments principaux: Segment de code (votre programme) Données ( static et globales) Le tas (mémoire dynamique) ( heap ) Pile (segment automatique) ( stack )

6 21-Jan-14 6 JGA Beaulieu Modèle de mémoire Code Tas Pile } Espace vide; la dernière frontière Données

7 21-Jan-14 7 JGA Beaulieu Memory model Dude… où est ma Var?

8 21-Jan-14 8 JGA Beaulieu Modèle de mémoire Dude…Où est ma var? int i = 0; void main (void) { int j = 0; } int Fctn () { int l = 0; static int k = 0; } Code Stack Data Heap

9 21-Jan-14 9 JGA Beaulieu Modèle de mémoire Dude…Où est ma var? int i = 0; void main (void) { int j = 0; j = j + 5; } int Fctn () { int l = 0; static int k = 0; k = k +10; } Code Stack Données Tas

10 21-Jan JGA Beaulieu Modèle de mémoire Dude…Dude…Où est ma var? void main (void) { int *iPtr; … iPtr = (int *)malloc(10 * sizeof(int)); } Code Pile Données Tas

11 21-Jan JGA Beaulieu Example #include int myGlobal=0; void main(void) { char localString[]="TEST"; int *pInt; static int i=100; printf("Une adresse de pile : %d\n", localString); printf("Une autre adresse de pile: %d\n", &pInt); printf("Une adresse de texte : %d\n", "Hello"); printf("Adresse de var statique : %d\n", &i); printf("Adresse de var globale : %d\n", &myGlobal); getchar(); }

12 21-Jan JGA Beaulieu Arithmétique de pointeur Vous avez déjà vue ou même utilisé au moins une opération darithmétique de pointeur int *pInt = NULL; … pInt++; //Bouge mon ptr en avant de un En avant de un, mais un quoi?

13 21-Jan JGA Beaulieu Arithmétique de pointeur Les pointeurs ont des types parce quils pointent à un type. Ceci est important quand on fait de larithmétique de pointeurs: int tblDeInts[5] = {1,2,3,4,5}; int *pInt = tblDeInts; … pInt++; //Ceci bouge mon pointeur en //avant de deux octets Chaque carré est un octet En pInt++ tblDeInts

14 21-Jan JGA Beaulieu Arithmétique de pointeur Et: char aOfChars[3] = {'a','b','c','d','e'}; char *pChar = aOfChars; … pChar++; //Ceci bouge le pointeur // de un octet en pChar++ Chaque carré est un octet En mémoire aOfChars

15 21-Jan JGA Beaulieu Arithmétique de pointeur La même chose va pour tout les autres types de pointeurs! Si on pointe vers la définition de type structure ETUDIANT: ETUDIANT *ptrAEtud = unEtudiantCMR; … ptrAEtud++; //Ceci bouge le pointeur //vers lavant de //sizeof(ETUDIANT) octets

16 21-Jan JGA Beaulieu Arithmétique de pointeur Il y a seulement quelques opérations arithmétiques que vous pouvez faire sur les pointeurs : int *pInt; Unary: ++pInt, --pInt Postfix: pInt++, pInt-- Ajouter un index (un int ) à un pointeur: pInt + 5 (avance de 5 positions) Soustraction dun index: pInt – 5 Soustraction de pointeurs: pInt1 – pInt2 Donne le nombre de positions entre deux pointeurs – utile pour calculer les offsets dans les tableaux (distance entre éléments)

17 21-Jan JGA Beaulieu Arithmétique de pointeur Vous ne pouvez pas additionner, multiplier ou diviser deux pointeurs (il ny a aucun point à faire cela ): Est-ce que quelque chose de bon pourrait en ressortir? Sans être pointilleux on peut dire que ce ne serait point une bonne idée.

18 21-Jan JGA Beaulieu Quiz Time Quelle est la différence entre le tas et la pile pour les programmes? Avec le programme suivant répondez tas ou pile: //Un programme int i = 0; //où? void main (void) { int j = 0;// où? } int Fctn () { static int k = 0;// où? int l = 0;// où? }

19 21-Jan JGA Beaulieu Quiz Time Dessinez où les pointeurs sont dans le tableau: int tblDeInts[5] = {1,2,3,4,5}; int *pInt = tblDeInts; Int *pInt2 = NULL pInt = pInt + 4; pInt2 = pInt--; tblDeInts[0] = pInt – pInt2; //Quy a t-il //à tblDeInts[0]?


Télécharger ppt "GEF 243B Programmation informatique appliquée Modèle de mémoire et arithmétique de pointeurs §10.2."

Présentations similaires


Annonces Google