Les pointeurs Suite Pointeurs Un pointeur cest une
- Slides: 15
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. Un pointeur, c’est alors une variable de type int (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.
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 case Imaginons que l’utilisateur modifie (avec un cin par exemple) la 10ème case. a et b peuvent détecter cette modification en allant voir à la 10ème case !
Syntaxe Déclaration : * type *id. Ptr; Nom de la variable Le type peut être un type simple (int, float…) ou un objet (n’importe quelle classe). Ce petit signe indique l’on ne travaille plus sur une variable normale, mais sur un pointeur
Syntaxe Opérateur d’adresse : & cout<<&id. Var; Nom d’une variable de n’importe quel type Plutôt que d’afficher la valeur de la variable, on affiche l’adresse de la case mémoire Ce petit signe indique l’on veux récupérer l’adresse d’une variable
Syntaxe Opérateur de déréférencement : * cout<<*ptr; Nom d’un pointeur Plutôt que d’afficher l’adresse du pointeur, on affiche la valeur qui est dans la case mémoire Ce petit signe indique l’on veux récupérer la valeur située à une adresse précise
Syntaxe On déclare une variable normale de type caractère Exemple : char c = ‘a’; char *p; p=&c; cout << *p; 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’)
4 AC 0 Exemple… 4 ABF 4 ABE Finalement : 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 ? Tas 23 AA 23 A 9 23 A 8 23 A 7 23 A 6 p 23 A 6 23 58 i 23 A 5 F 3 DE 23 A 4 0 F 4 D BSS Prog 8
Mais ce n’est pas tout ! Half life 2 : 4 Go de texture, de sons… Windows Vista : 4 Go de programmes… Question : Comment faire pour jouer à Half Life 2 quand on exécute Windows Vista sur une machine ne disposant que de 1 Go de mémoire vive?
Réponse Vista et Half Life 2 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 : new pour réserver une case delete pour supprimer le contenu d’une case 10
4 AC 0 Rappels… Finalement : 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; 4 ABF 4 ABE Tas 23 AA 23 A 9 23 A 8 6 23 A 7 23 A 6 23 A 8 p 23 A 6 23 58 i 23 A 5 F 3 DE 23 A 4 0 F 4 D BSS Prog 11
4 AC 0 Rappels… 4 ABF 4 ABE Exemples de bugs : Tas 23 AA 23 A 9 int *p; p=new int; *p=6; 6 23 A 8 23 A 7 23 A 9 23 A 8 23 A 6 F 3 DE 23 A 5 0 F 4 D p BSS Prog 23 A 4 12
4 AC 0 ! ! Rappels… ! t l u Exemples de bugs : a F int *p; on i t int *q; a t p=new int; n e q=p; m g Se *p=6; delete p; 4 ABF 4 ABE Tas 23 AA 23 A 9 23 A 8 6 23 A 7 23 A 8 p 23 A 8 q 23 A 6 cout<<*q; 23 A 5 F 3 DE 23 A 4 0 F 4 D BSS Prog 13
Mémoire dynamique Allocation de mémoire dynamique int *tab; tab = new int [10]; Destruction de la mémoire delete [] tab; Avantage : Créer des tableaux de taille défini par l’utilisateur
void affiche. Tout. Tableau (int *tab, int taille) { for (int i=0; i<taille; i++) cout<<tab[i]<<endl; } void saisie. Tout. Tableau (int *tab, int taille) { for (int i=0; i<taille; i++) cin>>tab[i]; Il est possible d’utiliser les } crochets, comme pour un int main(void) { tableau normal… int *tab; On ne connait plus par contre int taille; le nombre de case ! cin >> taille; tab = new int [taille]; saisie. Tout. Tableau(tab, taille); affiche. Tout. Tableau(tab, taille); delete []tab; affiche. Tout. Tableau(tab, taille); return 0; }
- Tchuch
- Theoreme du pointeur
- Une suite au ritz
- Comportement a l'infini
- Comment faire une introduction dans une dissertation
- Une pilule une petite granule chanson
- Il était une fois une petite fille
- Si une porte se ferme une autre s'ouvre
- Coupe d'une racine
- Ponctuation poésie renee jeanne mignard
- Le bonheur est une trajectoire et non pas une destination
- Scribbr introduction
- Appuyez sur l’image qui est dans le bon sens
- Une d un journal
- Michalangelo david
- Pronom relatif