Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parJuste Prost Modifié depuis plus de 11 années
1
GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1
2
21-Jan-14 2 JGA Beaulieu Revue EchangeInts(INT16U* premierInt, INT16U* secondInt); INT16U a = 8; INT16U b = 7; … EchangeInts(?a,?b);//quel symbole remplace ? … EchangeInts(INT16U* premierInt, INT16U* secondInt) { INT16U temp; temp = ?premierInt; //quel symbole remplace ? ?premierInt = ?secondInt; ?secondInt = temp; return; }
3
21-Jan-14 3 JGA Beaulieu Synopsis Tableaux et pointeurs Variables et adresses Pointeurs constants Similarités entre les tableaux et les pointeurs
4
21-Jan-14 4 JGA Beaulieu Tableaux et pointeurs Les tableaux et les pointeurs sont reliés de très près. Il est important de connaître les similarités et les différences entre les pointeurs et les tableaux Aujourdhui nous revisitons certains concepts qui sont importants pour la compréhension de la relation entre les tableaux et les pointeurs
5
21-Jan-14 5 JGA Beaulieu Variables et adresses Quand nous parlons des variables, nous devons faire une distinction entre la valeur dune variable et son adresse Pour une exécution donnée dun programme, une variable va garder la même adresse (logique) mais sa valeur peut changer PoINT16Ueurs et variables La valeur du pointeur, qui est une adresse peut changer durant lexécution dun programme Ladresse (logique) dune variable pointeur cependant est constante
6
21-Jan-14 6 JGA Beaulieu Variables et adresses … void main() { … INT16U a = 145; INT16U *p = NULL; // un pointeur … p = &a; //met ladresse de a //dans le pointeur p. } Symbolique Mémoire 145 12500 a p 46798
7
21-Jan-14 7 JGA Beaulieu … void main() { … INT16U a = 145; INT16U *p = NULL; // un pointeur … p = &a; //met ladresse de a //dans le pointeur p. } Variables et adresses Symbolique Mémoire 145 12500 a p 46798 Ce sont des constantes
8
21-Jan-14 8 JGA Beaulieu … void main() { … INT16U a = 145; INT16U *p = NULL; // un pointeur … p = &a; //met ladresse de a //dans le pointeur p. } Variables et adresses Symbolique Mémoire 145 12500 a p 46798 Le contenue est variable
9
21-Jan-14 9 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a = 145; INT16U *p = NULL; INT16U scores[3] = {1,7,9}; … p = &a; scores[0] = a;//Bon p = scores; //Bon, voir à côté scores = p; //Pas légal } Symbolique Mémoire 145 12500 a p 46798 1 984 scores 79 scores[2]
10
21-Jan-14 10 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a = 145; INT16U *p = NULL; INT16U scores[3] = {1,7,9}; … p = &a; scores[0] = a;//Bon p = scores; //Bon, voir à côté scores = p; //Pas légal } Symbolique Mémoire 145 12500 a 984 p 46798 Cest une constante 145 984 scores 79 scores[2]
11
21-Jan-14 11 JGA Beaulieu PoINT16Ueurs constants On se souvient que un tableau a trois caractéristiques : un nom, un nombre fixe déléments et un type Le nom du tableau est une constante; cest ladresse qui pointe au premier octet du tableau. La prochaine diapo peut sembler un peu bizarre mais si vous pensez à scores comme un pointeur constant le tout devient plus évident
12
21-Jan-14 12 JGA Beaulieu PoINT16Ueurs constants Tout ces énoncés impriment la même valeur: printf("Valeur de scores - une constante %d\n", scores); printf("Adresse du tableau scores %d\n",&scores); printf("Adresse du premier élément %d\n",&scores[0]);
13
21-Jan-14 13 JGA Beaulieu PoINT16Ueurs constants Les similarités entre les tableaux et les pointeurs nous permettent daccéder les données dans un tableau de deux façons différentes: en utilisant un index ou un pointeur Nous pouvons aussi utiliser un index sur un pointeur pour référer aux éléments dans le tableau Nous pouvons déréférencer le nom du tableau, comme un pointeur Et encore plus!!! Rorouzan chap 11 a bien plus dexemples
14
21-Jan-14 14 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a[3] = {1,7,9}; INT16U* p = a; //On remarque que a //est une adresse INT16U* r = &a[1]; … } Symbolique Mémoire 1 a 79 a[0]a[1]a[2] 984 p 46798 984 986 r 46800
15
21-Jan-14 15 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a[3] = {1,7,9}; INT16U *p = a; INT16U *r = &a[1]; … *p = 12; //Ceci est familier } Symbolique Mémoire 12 a 79 a[0]a[1]a[2] 984 p 46798 984 986 r 46800
16
21-Jan-14 16 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a[3] = {1,7,9}; INT16U *p = a; INT16U *r = &a[1]; … *p = 12; //Ceci est familier *a = 543;//Regardez! On déréférence //un tableau } Symbolique Mémoire 543 a 79 a[0]a[1]a[2] 984 p 46798 984 986 r 46800
17
21-Jan-14 17 JGA Beaulieu PoINT16Ueurs constants … void main() { … INT16U a[3] = {1,7,9}; INT16U *p = a; INT16U *r = &a[1]; … *p = 12; //Ceci est familier *a = 543; //déréférence un tableau r[0] = 66; //un pointeur indexé r[-1] = 77; r[1] = 111; } Symbolique Mémoire 77 a 66111 a[0]a[1]a[2] 984 p 46798 984 986 r 46800
18
21-Jan-14 18 JGA Beaulieu Quiz Time … void main() { … INT16U a[3] = {1,7,9}; INT16U *p = NULL; INT16U *r = NULL; … r = &a[1]; //dessinez les pointeurs p = &a[2]; //remplissez les boites *p = 8; //changez les valeurs p[-2] = r[0]; //écrivez la valeur } Symbolique Mémoire 1 a 79 a[0]a[1]a[2] p 46798 984 r 46800
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.