les pointeurs
DESCRIPTION
Les pointeurs. Suite. Pointeurs. Un pointeur, c’est une variable dont la valeur est l'adresse d'une cellule de la mémoire Traduction : Imaginons que la mémoire de l’ordinateur, c’est un grand tableau. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/1.jpg)
Suite
![Page 2: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/2.jpg)
PointeursUn pointeur, c’est une variable dont la valeur
est l'adresse d'une cellule de la mémoireTraduction :
Imaginons que la mémoire de l’ordinateur, c’est un grand tableau.
Un pointeur, c’est alors une variable de type intint (un nombre) qui permet de se souvenir d’une case particulière.
On comprend bien que le pointeur ne se soucis pas de savoir ce qu’il y a dans la case, mais bien de l’adresse de la case.
![Page 3: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/3.jpg)
Qu’est ce que ça change?Un pointeur est une adresse
On sépare le contenu (une valeur) du contenant (une adresse)
On a l’adresse de quelque chose, et on peut le partager :Imaginons deux pointeurs a et b pointant sur la
10ème caseImaginons que l’utilisateur modifie (avec un cincin par
exemple) la 10ème case.a et b peuvent détecter cette modification en allant
voir à la 10ème case !
![Page 4: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/4.jpg)
Syntaxe Déclaration : *type *idPtr;
Le type peut être un type simple (int, float…) ou un objet (n’importe quelle classe).
Ce petit signe indique que l’on ne travaille plus sur une variable normale, mais sur un pointeur
Nom de la variable
![Page 5: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/5.jpg)
Syntaxe Opérateur d’adresse : &
cout<<&idVar;
Plutôt que d’afficher la valeur de la variable, on affiche l’adresse de la case mémoire
Ce petit signe indique que l’on veux récupérer l’adresse d’une variable
Nom d’une variable de n’importe quel type
![Page 6: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/6.jpg)
Syntaxe Opérateur de déréférencement : *
cout<<*ptr;
Plutôt que d’afficher l’adresse du pointeur, on affiche la valeur qui est dans la case mémoire
Ce petit signe indique que l’on veux récupérer la valeur située à une adresse précise
Nom d’un pointeur
![Page 7: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/7.jpg)
Syntaxe Exemple :
char c = ‘a’;char *p;p=&c;cout << *p;
On déclare une variable normale de type caractère
On déclare un pointeur sur une case de type caractère
On donne l’adresse de la variable c au pointeur p
On affiche la valeur de la case pointée par p (‘a’)
![Page 8: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/8.jpg)
Exemple…Finalement :
i
4ABF
4AC0
4ABE
23A9
23AA
23A8
p23A6
23
int i;int *p;i=23;//diff entre i et &i ?p=&i;//diff entre p et *p ?i=58;//valeur de p et *p ?
58
F3DE
0F4D
23A7
23A6
23A5
23A4 Prog
BSS
Tas
8
![Page 9: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/9.jpg)
Mais ce n’est pas tout !Half life 2 : 4Go de texture, de sons…Windows Vista : 4Go de programmes…
Question :Comment faire pour jouer à Half Life 2 Half Life 2 quand
on exécute Windows Vista Windows Vista sur une machine ne disposant que de 1Go de mémoire vive?
![Page 10: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/10.jpg)
RéponseVista et Half Life2 ne doivent pas charger
tout en mémoire…Uniquement ce qu’il faut
Il faut donc prévoir un mécanisme pour charger et décharger des zones en mémoire :newnew pour réserver une casedeletedelete pour supprimer le contenu d’une case
10
![Page 11: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/11.jpg)
Rappels…Finalement :
i
4ABF
4AC0
4ABE
23A9
23AA
23A8
p23A6
23
int i;int *p;i=23;//diff entre i et &i ?p=&i;//diff entre p et *p ?i=58;//valeur de *p ?p=new int;*p=6;
58
F3DE
0F4D
23A7
23A6
23A5
23A4 Prog
BSS
Tas
23A8
6
11
![Page 12: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/12.jpg)
Rappels…Exemples de bugs :
4ABF
4AC0
4ABE
23A9
23AA
23A8
p23A8int *p;p=new int;p=new int;*p=6;
F3DE
0F4D
23A7
23A6
23A5
23A4
Prog
BSS
Tas
6
23A9
23A8
23A9
12
![Page 13: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/13.jpg)
Rappels…Exemples de bugs :
4ABF
4AC0
4ABE
23A9
23AA
23A8
p23A8
int *p;int *q;p=new int;q=p;*p=6;delete p;cout<<*q; F3DE
0F4D
23A7
23A6
23A5
23A4Prog
BSS
Tas
6
23A8 q
13
![Page 14: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/14.jpg)
Mémoire dynamiqueAllocation de mémoire dynamiqueint *tab;tab = new int [10];Destruction de la mémoiredelete [] tab;
Avantage :Créer des tableaux de taille défini par
l’utilisateur
![Page 15: Les pointeurs](https://reader036.vdocuments.fr/reader036/viewer/2022062305/56816807550346895ddd8b7a/html5/thumbnails/15.jpg)
void afficheToutTableau (int *tab, int taille){for (int i=0; i<taille; i++)
cout<<tab[i]<<endl;}void saisieToutTableau (int *tab, int taille){for (int i=0; i<taille; i++)
cin>>tab[i];}int main(void){int *tab;int taille;cin >> taille;tab = new int [taille];saisieToutTableau(tab, taille);afficheToutTableau(tab, taille);delete []tab;afficheToutTableau(tab, taille);return 0;
}
Il est possible d’utiliser les crochets, comme pour un tableau normal…On ne connait plus par contre le nombre de case !