Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMathieu Briere Modifié depuis plus de 10 années
1
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1
2
2 Hiver 2010JGA Beaulieu Revue EchangeInts(int* premierInt, int* secondInt); int a = 8; int b = 7; … EchangeInts(?a,?b);//quel symbole remplace ? … EchangeInts(int* premierInt, int* secondInt) { int temp; temp = ?premierInt; //quel symbole remplace ? ?premierInt = ?secondInt; ?secondInt = temp; return; }
3
3 Hiver 2010JGA Beaulieu Synopsis Tableaux et pointeurs Variables et adresses Pointeurs constants Similarités entre les tableaux et les pointeurs
4
4 Hiver 2010JGA 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
5 Hiver 2010JGA 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 Pointeurs 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
6 Hiver 2010JGA Beaulieu Variables et adresses … void main() { … int a = 145; int *p = NULL; // un pointeur … p = &a; //met ladresse de a //dans le pointeur p. } Symbolique Mémoire 145 12500 a p 46798
7
7 Hiver 2010JGA Beaulieu … void main() { … int a = 145; int *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
8 Hiver 2010JGA Beaulieu … void main() { … int a = 145; int *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
9 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a = 145; int *p = NULL; int 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
10 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a = 145; int *p = NULL; int 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
11 Hiver 2010JGA Beaulieu Pointeurs 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
12 Hiver 2010JGA Beaulieu Pointeurs 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
13 Hiver 2010JGA Beaulieu Pointeurs 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
14 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a[3] = {1,7,9}; int *p = a; //On remarque que a //est une adresse int *r = &a[1]; … } Symbolique Mémoire 1 a 79 a[0]a[1]a[2] 984 p 46798 984 986 r 46800
15
15 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a[3] = {1,7,9}; int *p = a; int *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
16 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a[3] = {1,7,9}; int *p = a; int *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
17 Hiver 2010JGA Beaulieu Pointeurs constants … void main() { … int a[3] = {1,7,9}; int *p = a; int *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
18 Hiver 2010JGA Beaulieu Quiz Time … void main() { … int a[3] = {1,7,9}; int *p = NULL; int *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.