Mes notes sur le C, partie 8 [Les pointeurs]

Mes notes sur le C, partie 8 [Les pointeurs]

[menu_c]

Cette partie est souvent difficile à comprendre pour les apprentis développeurs du langage C, je n’ai pas encore saisies les subtilités des pointeurs mais je vais vous expliquer ce que j’ai compris.

L’image à garder à l’esprit quand on pense aux pointeurs, du moins au début, c’est celle ci :

ADRESSEVALEUR
0100
1520.25
2-800

Il s’agit d’une représentation de la mémoire, la manière dont vous stocké les informations.

Il s’agit bien-sur d’un schéma simplifié, mais il aide à comprendre la notion de pointeur.

 

Avant de parler des pointeurs j’aimerais revenir sur ce bout de code :

#include <stdio.h>

int main(int argc, char *argv[])
{
    int nbr;
    scanf("%d", &nbr);
    printf("\nVous venez de saisir le nombre %d", nbr);

    return 0;
}

Ce qui nous intéresse ici, c’est le symbole “&”, il indique l’adresse de la variable nbr.

En effet on sait que quand on déclare une variable on demande à l’ordinateur de réserver une certaine quantité de place en mémoire, cette quantités est donc définie à une adresse précise.

Ensuite on utilise la fonction “scanf()” qui nous permet de saisir du contenu, en l’occurrence ici on souhaite écrire le nombre que va saisir l’utilisateur dans la variable nbr. Il faut donc trouver cette variable nombre pour pouvoir écrire dedans.

Le fait d’indiquer “&nbr” signifie adresse de nbr.

&variable = adresse de la variable

variable = valeur de la variable 

Il est possible d’affiché l’adresse d’une variable en utilisant le symbole “%p” :

printf("Vous venez de saisir le nombre %p", nbr);

 

Maintenant nous allons pouvoir aborder les pointeurs.

Les pointeurs s’utilise avec le symbole “*”.

Soit de cette manière :

int *variable;

Ou comme ceci :

int* variable

Donc pour le moment on sait qu’un pointeur est une variable, il doit certainement contenir quelque chose, il contient l’adresse d’une autre variable.

En résumé il n’est pas rare de voir ce genre de chose :

    int nbr;
    int *pointeurSurNbr = &nbr;

Ce code signifie pointeurSurNbr contient l’adresse de la variable nbr. 

 

Chose importante à savoir il faut toujours initialisé notre pointeur à NULL par défaut.

Pour être sur que la création d’un pointeur est bien comprise, voici un nouveau schéma

 ADRESSEVALEUR
 056
 11.16
Variable age15318
Pointeur sur la variable age206153

La variable age à pour adresse 153 et pour valeur 18

Le pointeur de la variable age à pour adresse 206 et pour valeur 153.

L’un des avantages d’utilisés les pointeurs c’est qu’on va pouvoir directement accéder à la valeur de “age” depuis le pointeur, si c’est pas clair voici un exemple :

#include <stdio.h>

int main(int argc, char *argv[])
{
    int nbr = 18;
    int *pointeurSurNbr = &nbr;
    printf("\nVous venez de saisir le nombre %d", *pointeurSurNbr);

    return 0;
}

En utilisant l’étoile devant pointeurSurNbr, vous allez pouvoir directement accéder à la valeur de l’adresse stockée dans pointeurSurNbr.

Dans ce cas *pointeurSurNbr vaut 18.

pour conclure cette partie voici un récap des choses à comprendre et apprendre par coeur :

int var : Création d’une variable de type int et stockage en mémoire à l’aide d’une adresse et d’une valeur qu’il faut mettre à 0 par défaut.

&var : Adresse en mémoire de la variable “var”.

int *pointeur : Création d’un pointeur et stockage en mémoire à l’aide d’une adresse et d’une valeur qu’il faut mettre à NULL par défaut.

*pointeur : La valeur de la variable sur laquelle pointe le pointeur.

Partager

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *