Skip to content

Instantly share code, notes, and snippets.

@Karobwe
Last active May 18, 2018 12:51
Show Gist options
  • Save Karobwe/0119e4748e297f2e9d6188c55cca8efd to your computer and use it in GitHub Desktop.
Save Karobwe/0119e4748e297f2e9d6188c55cca8efd to your computer and use it in GitHub Desktop.

Apprenez à programmer en C

Activité 2: Expliquez ce qu'est un pointeur

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.

Fonctionnement de la mémoire d'un ordinateur

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;
}
This file has been truncated, but you can view the full file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment