Accueil        LEXIQUE        Unités        Algorithmes        Tutoriel   

Sommaire lexique

Type Pointeur


Un type Pointeur contient des adresses de variables dynamiques qui peuvent être générées lors de l'exécution du programme avec l'une des procédures standard New ou GetMem. Les pointeurs sont toujours utilisés lorsque le nombre ou la taille des objets ne peuvent pas être déterminés au moment de la compilation. Dans la déclaration d'un pointeur, le type de variable auquel le pointeur doit faire référence doit être spécifié, ce que l'on appelle le type de base du pointeur.

Le type de base doit toujours être donné sous forme de nom. Ce nom n'a pas toujours besoin d'être défini. Dans ce cas, la définition du type de base doit suivre immédiatement, à savoir dans la même partie de définition de type dans laquelle le type pointeur est également défini. Voici une exception à la règle Pascal habituelle selon laquelle tout doit être défini avant d'être utilisé. Voici quelques exemples:

type
    CharPtr = ^char;        { Pointeur vers un seul caractère }
    StringPtr = ^string;    { Pointeur vers une chaîne        }
    ListPtr = ^ListElement; { Pointeur vers ...?              }
    ListElement = record
        number: Integer;
        next:   ListPtr;
        end;
Le dernier exemple illustre comment les pointeurs peuvent être utilisés pour créer des structures de données de toute taille: une seule variable de pointeur dans le programme peut faire référence au premier élément de la liste, cela fait référence au suivant, etc.

La seule chose qui reste maintenant est une façon de marquer la fin de cette chaîne. Pascal fournit le mot réservé nil à cet effet. Il représente une valeur de pointeur qui ne fait pas référence à des informations supplémentaires, mais à rien. Il forme, pour ainsi dire, le signal de "Attention, c'est le bout de la chaîne!".

Pure Pascal définit aussi un type universel de pointeur, Pointer, qui ne spécifie pas le type de données vers lequel il pointe. À première vue, une construction absurde qui n'a de sens que dans des projets plus importants, à savoir lorsque les Unité veulent garder le type d'objets secret du reste du monde.

Addentum 1 du webmaster (05/02/2022)

Le langage Pascal ne permet pas d'afficher les valeurs de pointeur (autrement dit "adresse") tel quel. Ainsi, si pour l'exemple ci-dessus, vous aviez écrit :
Var
    Bidul : ^Char;
Begin
    new (Bidul); {Pour réserver de la place pour une variable pointeur}
    Bidul^:= 'a';
    writeln('Adresse de Bidul : ',Bidul);
End.
Le compilateur vous aurait renvoyé un message d'erreur!! En effet, il faut auparavant convertir ce type "pointeur" en un entier long (sur Atari ST du moins) en utilisant les "Cast" du Pascal:
Var
    Bidul : ^Char;
Begin
    new (Bidul); {Pour réserver de la place pour une variable pointeur}
    Bidul^:= 'a';
    writeln('Adresse de Bidul : ',LongInt(Bidul));
End.
Fonctionnera cette fois.

Sommaire lexique


Copyright © 2021 par Albatros Concept (Bruno Aubin)