Les pointeurs sont toujours utiles un moment ou un autre
![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif)
Comme tu l'as remarqué (ou le remarquera), SDL par exemple manipule des pointeurs vers des SDL_Surface.
Bref
![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif)
Alors soyons clair sur ton exemple, tu n'as pas défini a (ou alors tu ne l'as pas mis)
Disons que je pose, avant ce que tu as mis :
- Code:
-
int a = 5;
Je te conseille d'initialiser a ! si tu ne le fais pas, il peut avoir n'importe quelle valeur (y compris 2293680)
Un peu comme si tu fais :
- Code:
-
int a;
cout << a << endl;
qu'est ce que ça te donne ? si le compilo est gentil, ça te donne 0, mais ce n'est pas garanti, et si tu compiles en release (pour aller vite), alors la, attends toi a avoir un nombre exotique !
Bref, reprenons :
- Code:
-
int *p = a;
A priori, le compilateur va gueuler (certains vont refuser catégoriquement de compiler : tu assignes un pointeur a un int).
Si le compilo est gentil (...), il va prendre la valeur du int comme adresse. Autrement dit, si le a vaut 5, il va mettre 5 dans le pointeur, donc le pointeur pointera sur l'adresse 5.
Mais en tous les cas, je te déconseille cette écriture : ne donne pas de int a un pointeur.
Ensuite :
- Code:
-
int *p =&a;
p++;
cout <<*p <<endl;
cout << p <<endl ;
c'est correct, le pointeur p pointe sur l'adresse de a.
Donc la ligne cout << *p te donnera 5
(car j'ai initialisé a à 5 ! si tu n'as pas initialisé a, alors tu peux avoir une valeur exotique en effet)
la ligne cout << p va te donner un nombre a dormir dehors : c'est l'adresse de a : l'endroit en mémoire ou a est gardé
![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif)
le p++ va décaler le pointeur vers la droite !
C'est a dire que si tu fais :
- Code:
-
int t[5]; // garantie 5 int contigus en mémoire
t[0] = 3;
t[1] = 17;
int* p = &t[0];
cout << *p << endl; // te donne 3 (car t[0] vaut 3)
p++; // décale d'un int vers la droite, et le int a droite de t[0], c'est t[1]
cout << *p << endl; // te donne 17 (car t[0] vaut 3)
Enfin, pour ton dernier bout de code :
le :
- Code:
-
*p++;
Je te déconseille cette écriture.
Tout d'abord, il me faut un petit temps pour trouver ce que ça fait ! Et sache que nombreux programmeur ne le savent pas ! C'est ambigu, et bien que reconnu par la norme, cette écriture est faite pour emmerder ceux qui vont te relire
![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif)
Je te conseille vivement donc de faire :
- Code:
-
*(p++);
ou
- Code:
-
(*p)++;
voir meme de décomposer ça en plusieurs lignes
![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif)
note : comme tu mets *p tout seul sur une ligne, la valeur renvoyée n'est pas utilisée.
Elle le serait si tu mettais :
- Code:
-
int a = *p;