Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 5/Pointers/fr

English · Français · Български · 中文(中国) · 日本語

Tutoriel de Pascal Objet : Types de données / Pointeurs

Un pointeur est un type de données qui tient une adresse mémoire. Un pointeur peut être pensé comme une référence à cette adresse mémoire alors qu'une variable accède à cette adresse mémoire directement. Si une variable est le numéro de téléphone de quelqu'un alors un pointeur est la page et le numéro de ligne où il est listé dans l'annuaire. Pour accéder à la donnée enregistrée à l'adresse mémoire, vous déréférencez le pointeur.

Pour déclarer un type de donnée pointeur, vous devez spécifier sur quoi il pointe. Ce type de données doit être précédé par un accent circonflexe (^). Par exemple, si vous créez un pointeur sur un entier, vous devrez utiliser ce code :

pascal
type
  PointerType = ^integer;

Dès lors, vous pouvez bien sûr déclarer des variables de type PointerType. Avant d'accéder à un pointeur, vous réservez de la place en mémoire que vous accéderez par ce pointeur. C'est fait comme ceci :

pascal
New (PointerVariable);

Pour accéder à la donnée à l'emplacement mémoire du pointeur (le déréférencer), vous ajoutez un accent circonflexe après le nom de la variable. Par exemple, si PointerVariable était déclaré comme un type PointerType (du dessus), vous pouvez affecter à l'emplacement mémoire une valeur en utilisant :

pascal
PointerVariable^ := 5;

Après avoir terminé avec la donnée désignée par le pointeur, vous devez désallouer l'espace mémoire. Sinon, chaque fois que vous exécuterez le programme, il allouera de plus en plus de mémoire jusqu'à ce que votre ordinateur n'en ait plus. Pour désallouer la mémoire, vous utilisez la commande :

pascal
Dispose(PointerVariable);

Un pointeur peut être affecté à un autre pointeur. Toutefois, notez que depuis que l**'adresse**, pas la valeur, est en cours de copie, une fois que vous modifiez les données situées à un pointeur, l'autre pointeur, quand déréférencé, donne également les données modifiées. Aussi, si vous libérez (désallouez) un pointeur, le pointeur copié désigne des données incohérentes.

À quoi sont bons les pointeurs ? Pourquoi ne pouvez-vous pas simplement utiliser un entier dans les exemples ci-dessus au lieu d'un pointeur vers un entier ? Bien, l'exemple du dessus est clairement un exemple artificiel. Le vrai pouvoir des pointeurs est que, en conjonction avec les enregistrements, ils rendent possible les structures de données dimensionnées dynamiquement. Si vous avez besoin de stocker des articles d'un type de donnée dans un certain ordre, vous pouvez utiliser un tableau. Néanmoins, votre tableau a une taille prédéfinie. Si vous n'avez pas une taille suffisante, vous ne pourrez pas accueillir toutes les données. Si vous avez un tableau énorme, vous prenez beaucoup de mémoire quand parfois cette mémoire n'est pas utilisée.

Une structure de donnée dynamique, d'un autre côté, ne prend que la mémoire nécessaire. Ce que vous faites est de créer un type de données qui pointe sur un enregistrement. Après, cet enregistrement a ce type de pointeur dans un de ses champs. Par exemple, les piles et les files peuvent toutes être implémentées en utilisant cette structure de données :

pascal
type
  PointerType = ^RecordType;
  RecordType = record
    data : integer;
  next : PointerType;
end;

Chaque élément pointe sur le suivant. Le dernier dans la chaîne indique qu'il n'y a pas de suivant en donnant la valeur nil à son champ next.


From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 5/Pointers/fr", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.