Introduction sur les pointeurs

Un pointeur est une variable contenant l'adresse (la position dans la mémoire centrale de l'ordinateur) d'une autre variable d'un type donné. Les pointeurs permettent de définir des structures dynamiques, c'est-à-dire qui évolue au cours du temps comme des tableaux dynamiques par exemple.


Principe

En préambule, il est bon de rappeler que  chaque variable correspond à des cases (octets) dans la mémoire centrale de l'ordinateur.

Selon le type de la variable, le nombre de cases est plus ou moins important.

Une déclaration de variable dans un programme correspond à une réservation d'octets dans la mémoires.


Chaque case mémoire est caractérisée par son adresse.

Il est donc possible, dans un programme, d'accéder au contenu d'une variable

unsigned char maVar; //réserve l'emplacement d'un octet en mémoire pour maVar

maVar =4; //on accède à la donnée maVar par son nom et on peut la modifier

Exemple :

dans l'exemple précédent l'instruction :

cout<<&maVar;

donnerait 00882AD0


Qu'est-ce qu'un pointeur

Un pointeur est donc une variable qui contient l'adresse d'une variable.

Un pointeur est toujours typé et doit être déclaré comme toute autre variable.


Déclaration d'un pointeur

forme type * nom_du_pointeur(valeur initiale);

exemple : int * mon_pointeur(0);


En reprenant l'exemple précédent :

unsigned char *pVar(0);       //création d'un pointeur dont le type est identique à celui maVar.On l'initialise à 0

unsigned char temp;

pVar = &maVar;       //pVar prend la valeur de l'adresse de maVar

temp = *pVar;          //après cette opération temp sera égal à maVar



Manipulation d'un pointeur

Création

Si le pointeur doit être créé de manière manuelle, ce qui signifie qu'il n'a pas été déclaré dans l'en-tête du programme (comme dans les exemples ci-dessus), il est nécessaire de réserver de la place dans la mémoire avec l'instruction NEW.


pVar = new (unsigned char); //on demande au système de trouver de la place dans la mémoire


Destruction

Pour libérer la mémoire, il faudra ensuite utiliser l'instruction DELETE


delete pVar; // on libère la mémoire


Remarque : lors de la fermeture normale d'un programme, les réservation sont automatiquement libérées par le système d'exploitation.


Intérêt des pointeurs

   for(int i = 0; i < 100; i++)

       {

       mesBoutons[i] = new QPushButton("", this);

       mesBoutons[i]->setMinimumWidth(40);

       mesBoutons[i]->setMinimumHeight(40);

        }