Un pointeur est rien d'autre qu'une variable. La seule différence avec une variable classique est qu'une variable normal contient un nombre quelqconque, alors qu'un pointeur contient un nombre qui correspond exactement à l'adresse d'une autre variable dans la mémoire. Habituellement, l'adresse d'une variable (classqiue ou pointeur) est affiché en héxadécimal par les fonctions standards du langage C, mais si ont convertit cette adresse en décimal, on obtient un nombre! (voir code ci-dessous)
Dans la représentation ci-dessous de la mémoire d'un ordinateur, on constate que la valeur contenu dans le pointeur pointeurDefense correspond exactement à l'adresse de la variable defense.
Démonstration avec le shéma ci-dessus:
int attaque = 8028;
int defense = 12393;
int *pointeurAttaque = &attaque;
int *pointeurDefense = &defense;
printf("valeur de attaque: %d", attaque);
printf("adresse de attaque: %p", &attaque);
printf("valeur de pointeurAttaque: %p", pointeurAttaque);
printf("adresse de pointeurAttaque: %p", &pointeurAttaque);
printf("valeur de la variable pointé par pointeurAttaque: %d", *pointeurAttaque);
Programme qui montre que la valeur contenu dans un pointeur n'est rien d'autre qu'un nombre mais en héxadecimal:
#include <stdio.h>
#include <stdlib.h>
// Fonction qui converti un nombre hexadécimal en nombre décimal
long hexToDecimal(void *variable) {
char adresse[50] = "";
sprintf(adresse, "%p", variable); // Converti l'adresse de la variable en une chaine
// Transforme la chaine en un nombre puis renvoie le resultat (long)
return strtol(adresse, NULL, 16);
}
int main() {
double x = 3.3333333;
printf("x se trouve à l'adresse %ld\n ", hexToDecimal(&x));
return 0;
}