Langage C : Les pointeurs

Un pointeur est une variable qui contient l'adresse d'une autre variable. La valeur du pointeur est donc l'adresse d'une zone mémoire qui peut contenir des données (pointeur de données) ou du code (pointeur de fonction).

Par exemple, au moment de la déclaration de la variable chiffre (int chiffre;), de la mémoire est allouée pour cette variable, à un emplacement réservé, désigné de manière unique par son adresse.

Au moment de l'affectation d'une valeur à cette variable (chiffre = 3;), cette valeur sera stockée dans la mémoire à l'emplacement réservé.
Comme cet emplacement (adresse) est aussi un nombre (dont la taille maximum dépend des machines), il est possible de stocker ce nombre dans une autre variable. Cette dernière variable est un pointeur (qui contient donc l'adresse d'une autre variable...).

Inhaltsverzeichnis Haut

Déclaration de pointeur en C

Syntaxe de pointeur en C

Type *identificateur;

  • Type: type de variable.
    Comme une variable de type pointeur contient un nombre qui représente une adresse, nous devons indiquer le type de la variable contenue à cette adresse.
  • identificateur: nom de la variable pointeur.
    L'identificateur est précédé de l'opérateur * qui indique que l'on parle de l'objet pointé.

Exemple de pointeur en C

int *px;

Par cette instruction, nous déclarons que l'objet pointé par px est un entier (int).
Il sera donc inutile par la suite de tenter d'y substituer un objet de type caractère.

Inhaltsverzeichnis Haut

L'opérateur &

Il est possible d'assigner l'adresse d'une variable préalablement définie:

char lettre;
char *pointeur;
pointeur = &lettre;

Explications

L'opérateur & renvoie l'adresse mémoire de la variable à laquelle il est appliqué.
Dans notre exemple, pointeur pointe donc sur la variable lettre, puisqu'il en contient l'adresse.

Inhaltsverzeichnis Haut

Tableau des opérateurs

Symbole | * | & |
Nom | Opérateur d'indirection | Opérateur de calcul d'adresse |
Description | Considère son opérande comme l'adresse du dernier destinataire, seulement pour son contenu.
Il permet donc d'accéder à la zone pointée par le pointeur. |
Nous fournit l'adresse d'une variable. |
Exemple | x = *px; | px = &x; |

Inhaltsverzeichnis Haut

Remarques

  • Si a et b sont deux pointeurs,
    • a = b fait pointer a sur la même case mémoire que b.
  • Un pointeur en C n'est pas simplement une référence, il contient réellement l'adresse d'une variable.
  • Attention: si a est un pointeur,
    • a++ n'incrémente pas la valeur de la variable pointée par a, mais incrémente bien la valeur de a.
    • Il en résulte que a pointe sur la variable stockée dans l'emplacement mémoire suivant.
    • Comme nous ne savons pas ce qui se trouve à cette adresse, ce type d'opération peut se révéler très dangereux.
      Sous Unix, chaque processus est isolé, ayant son propre espace d'adressage. Le programme renvoie le message "segmentation fault" afin d'éviter que le processus ne puisse écrire dans un autre espace mémoire, ce qui pourrait conduire à un sérieux plantage système.

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 19/03/2002, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/c-pointeur.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.