0 votes

Exemple de pointeurs C++

J'ai un exemple de code :

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  
  p2 = &secondvalue; 
  cout << "1.p1: " << p1 << ", p2: " << p2 << endl;
  cout << "1.*p1: " << *p1 << ", *p2: " << *p2 << endl;
  *p1 = 10;
  cout << "2.p1: " << p1 << ", p2: " << p2 << endl;
  cout << "2.*p1: " << *p1 << ", *p2: " << *p2 << endl;
  *p2 = *p1; 
  cout << "3.p1: " << p1 << ", p2: " << p2 << endl;
  cout << "3.*p1: " << *p1 << ", *p2: " << *p2 << endl;
  p1 = p2;
  cout << "4.p1: " << p1 << ", p2: " << p2 << endl;
  cout << "4.*p1: " << *p1 << ", *p2: " << *p2 << endl;
  *p1 = 20;          
  cout << "5.p1: " << p1 << ", p2: " << p2 << endl;
  cout << "5.*p1: " << *p1 << ", *p2: " << *p2 << endl;  
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  cout << "firstvalue is " << &firstvalue << endl;
  cout << "secondvalue is " << &secondvalue << endl;

  getch();
    return 0;
}

Et voici le résultat :

1.p1: 0041FB40, p2: 0041FB34
1.*p1: 5, *p2: 15
2.p1: 0041FB40, p2: 0041FB34
2.*p1: 10, *p2: 15
3.p1: 0041FB40, p2: 0041FB34
3.*p1: 10, *p2: 10
4.p1: 0041FB34, p2: 0041FB34
4.*p1: 10, *p2: 10
5.p1: 0041FB34, p2: 0041FB34
5.*p1: 20, *p2: 20
firstvalue is 10
secondvalue is 20
firstvalue is 0041FB40
secondvalue is 0041FB34

Qu'est-ce qui est copié dans la ligne "p1 = p2" ? Est-ce que p1 devient une référence à p2 ou est-ce que cela fonctionne différemment ?

2voto

Kotti Points 3724

Tu dis juste : "Maintenant p1 doit pointer vers le même bloc de mémoire que p2 fait".

Ils commencent donc à pointer vers le même bloc de mémoire (vers la même adresse ) et, par conséquent, partagent les mêmes valeurs.

1voto

sjchoi Points 452

Adresse mémoire p1 prend l'adresse mémoire de p2 (0041FB34)

1voto

Jerry Coffin Points 237758

Depuis p2 contient l'adresse de secondvalue , p1=p2; copie l'adresse de secondvalue de p2 en p1 . Je vous déconseille cependant de l'appeler une référence si vous pouvez l'éviter -- une référence est quelque chose d'autre qui est suffisamment similaire à un pointeur pour causer une confusion de toute façon, donc appeler un pointeur une référence (ou même y penser comme une référence) est probablement une mauvaise idée.

0voto

sth Points 91594

Après la mission, p1 contiendra la même adresse mémoire que p2 . Les deux pointeurs pointeront sur la même variable, donc *p1 y *p2 se réfèrent à la même mémoire.

En dehors de cela, il n'y a pas de lien particulier entre p1 y p2 . Par exemple, une affectation suivante comme p1 = &firstvalue ne changera rien à la p2 variable pointeur et p1 y p2 pointeront à nouveau vers des emplacements mémoire différents.

0voto

btlachance Points 606

\= (l'opérateur d'affectation) ne fait que copier les valeurs d'une variable (p2) dans une autre (p1). Ainsi, après l'affectation, p1 et p2 sont synonymes en ce sens qu'elles font référence à la même adresse - leur déréférencement donnera la même valeur, comme on peut le voir dans votre impression.

Pour plus d'informations, essayez ceci article sur les pointeurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X