Pascal - Pointeurs

Les pointeurs en Pascal sont faciles et amusants à apprendre. Certaines tâches de programmation Pascal sont effectuées plus facilement avec des pointeurs, et d'autres tâches, telles que l'allocation de mémoire dynamique, ne peuvent pas être effectuées sans l'utilisation de pointeurs. Il devient donc nécessaire d'apprendre les pointeurs pour devenir un parfait programmeur Pascal. Commençons à les apprendre par étapes simples et faciles.

Comme vous le savez, chaque variable est un emplacement de mémoire et chaque emplacement de mémoire a son adresse définie, accessible à l'aide du nom de la variable de pointeur, qui désigne une adresse en mémoire.

Que sont les pointeurs?

Un pointeur est une variable dynamique, dont la valeur est l'adresse d'une autre variable, c'est-à-dire l'adresse directe de l'emplacement mémoire. Comme toute variable ou constante, vous devez déclarer un pointeur avant de pouvoir l'utiliser pour stocker une adresse de variable. La forme générale d'une déclaration de variable de pointeur est -

type
   ptr-identifier = ^base-variable-type;

Le type de pointeur est défini en préfixant la flèche vers le haut du symbole caret (^) avec le type de base. Le type de base définit les types des éléments de données. Une fois qu'une variable de pointeur est définie comme étant d'un certain type, elle ne peut pointer que des éléments de données de ce type. Une fois qu'un type de pointeur a été défini, nous pouvons utiliser levar déclaration pour déclarer des variables de pointeur.

var
   p1, p2, ... : ptr-identifier;

Voici quelques déclarations de pointeur valides -

type
   Rptr = ^real;
   Cptr = ^char;
   Bptr = ^ Boolean;
   Aptr = ^array[1..5] of real;
   date-ptr = ^ date;
      Date = record
         Day: 1..31;
         Month: 1..12;
         Year: 1900..3000;
      End;
var
   a, b : Rptr;
   d: date-ptr;

Les variables de pointeur sont déréférencées à l'aide du même symbole d'insertion (^). Par exemple, la variable associée référencée par un pointeur rptr , est rptr ^ . Il peut être consulté comme -

rptr^ := 234.56;

L'exemple suivant illustrera ce concept -

program exPointers;
var
   number: integer;
   iptr: ^integer;

begin
   number := 100;
   writeln('Number is: ', number);
   
   iptr := @number;
   writeln('iptr points to a value: ', iptr^);
   
   iptr^ := 200;
   writeln('Number is: ', number);
   writeln('iptr points to a value: ', iptr^);
end.

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200

Impression d'une adresse mémoire en Pascal

En Pascal, nous pouvons attribuer l'adresse d'une variable à une variable pointeur à l'aide de l'opérateur d'adresse (@). Nous utilisons ce pointeur pour manipuler et accéder à l'élément de données. Cependant, si pour une raison quelconque, nous devons travailler avec l'adresse mémoire elle-même, nous devons la stocker dans une variable de type mot.

Prolongeons l'exemple ci-dessus pour imprimer l'adresse mémoire stockée dans le pointeur iptr -

program exPointers;
var
   number: integer;
   iptr: ^integer;
   y: ^word;

begin
   number := 100;
   writeln('Number is: ', number);
   iptr := @number;
   writeln('iptr points to a value: ', iptr^);
   
   iptr^ := 200;
   writeln('Number is: ', number);
   writeln('iptr points to a value: ', iptr^);
   y := addr(iptr);
   writeln(y^); 
end.

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
45504

Pointeurs NIL

C'est toujours une bonne pratique d'attribuer un NILvaleur à une variable de pointeur au cas où vous n'avez pas d'adresse exacte à attribuer. Cela se fait au moment de la déclaration des variables. Un pointeur attribuéNILne pointe nulle part. Considérez le programme suivant -

program exPointers;
var
   number: integer;
   iptr: ^integer;
   y: ^word;

begin
   iptr := nil;
   y := addr(iptr);
   
   writeln('the vaule of iptr is ', y^);
end.

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

The value of ptr is 0

Pour vérifier un nil pointeur, vous pouvez utiliser une instruction if comme suit -

if(ptr <> nill )then     (* succeeds if p is not null *)
if(ptr = nill)then    (* succeeds if p is null *)

Pascal Pointers en détail

Les pointeurs ont des concepts nombreux mais simples et ils sont très importants pour la programmation Pascal. Voici quelques concepts de pointeurs importants, qui devraient être clairs pour un programmeur Pascal -

Sr. Non Concept et description
1 Pascal - Arithmétique du pointeur

Il existe quatre opérateurs arithmétiques qui peuvent être utilisés sur les pointeurs: incrémenter, décrémenter, +, -

2 Pascal - Tableau de pointeurs

Vous pouvez définir des tableaux pour contenir un certain nombre de pointeurs.

3 Pascal - Pointeur vers pointeur

Pascal vous permet d'avoir un pointeur sur un pointeur et ainsi de suite.

4 Passer des pointeurs vers des sous-programmes en Pascal

Le passage d'un argument par référence ou par adresse permet tous deux de modifier l'argument passé dans le sous-programme appelant par le sous-programme appelé.

5 Renvoyer le pointeur des sous-programmes en Pascal

Pascal permet à un sous-programme de renvoyer un pointeur.