Logo


Xanetiz > Programmation > Les pointeurs en C

Top

Les pointeurs en C

Les pointeurs en C


7 924 vues

Partager

La mémoire sur le PC

Tout d'abord, il faut voir la mémoire comme une suite d'adresses auxquelles correspondent une valeur unique. A chaque adresse, une valeur. Lorsque vous déclarez une variable en C, celle-ci est remplacé par une adresse à la compilation.

Le pointeur est la chose réputée la plus compliquée à comprendre en C. Pourtant c'est assez simple. Un pointeur est une variable spéciale qui contient l'adresse d'une autre variable. On dit que le pointeur pointe sur cette variable. Cela permet simplement de pouvoir modifier directement la variable pointé à l'aide du pointeur.

La question qu'il faut se poser : pourquoi de pas modifier la variable directement ? Parce que dans certains cas, ça n'est pas possible.

Les valeurs renvoyées par les fonctions

En C, une fonction est un bout de programme qui peut ne rien renvoyer (le type void) ou renvoyer une seule valeur (selon le type défini). Hors parfois, on veut obtenir un résultat sur plusieurs variables.

Le problème est que lorsque l'on passe directement une variable en paramètre à une fonction, celle-ci est copiée et sera supprimée à la fin de la fonction. Nous ne pouvons pas récupérer les valeurs.

C'est là que les pointeurs sont utiles. Il suffit juste de passer en paramètres les adresses des variables qui vont stocker le résultat. Ensuite, en travaillant sur les pointeurs dans la fonction, nous allons modifier indirectement les valeurs des variables pointés et donc nous aurons bien renvoyé plusieurs valeurs de manière indirecte.

Les pointeurs se déclarent comme les variables normales, sauf qu'il faut rajouter une étoile devant le nom. Pour pouvoir accéder à la valeur d'une variable pointée, on procède à une déréférenciation. Il suffit juste de rajouter une étoile devant le nom.

Il faut différencier :

Illustration à travers une fonction

Un exemple avec une fonction swap qui échange les valeurs dans deux variables :

void swap(int *p1, int *p2)
{
        int t = *p2; // déréférenciation
        *p2 = *p1;
        *p1 = t;
}

void main(void)
{
        int a = 5, b = 10;
        swap(&a, &b);
        printf("%d - %d", a, b); // va afficher 10 – 5
}

Pour obtenir l'adresse d'une variable en C, il faut utiliser le caractère & à placer devant le nom de celle-ci.

Pour résumer

Titre Vu Date
L'essentiel du langage PHP L'essentiel du langage PHP 12 500 14/03/10
Les injections SQL Les injections SQL 7 904 11/02/10
Utiliser un IDE pour programmer Utiliser un IDE pour programmer 6 822 25/02/10
Les designs en CSS Les designs en CSS 5 810 16/02/10
L'assembleur L'assembleur 7 123 10/02/10

StatistiquesNombre d'inscrits : 262
Dernier membre : Clyderar
Visiteurs en ligne : 14
Membres en ligne : Aucun

Copyright © 2022 Xanetiz.com - Tous droits réservés

Hebdotop