Logo


Xanetiz > Programmation > Les pointeurs en C

Top

Les pointeurs en C

Les pointeurs en C


4 770 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
Compiler avec GCC sur Linux Compiler avec GCC sur Linux 9 364 16/02/10
Exécuter un script PHP en ligne de commande Exécuter un script PHP en ligne de commande 3 575 04/04/12
L'essentiel du CSS L'essentiel du CSS 4 180 14/03/10
Le XML Le XML 3 960 13/02/10
L'essentiel du langage PHP L'essentiel du langage PHP 7 456 14/03/10

StatistiquesNombre d'inscrits : 174
Dernier membre : stiv68
Visiteurs en ligne : 3
Membres en ligne : Aucun

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

Hebdotop