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);
}