Sign in Join
Wiki copytemporary

Pointer/fr

Deutsch · English · Français · Suomi · Русский

Généralités sur les pointeurs

Ce que sont les pointeurs :

Exemple:\

pascal
var
   ptr1: ^Integer;  // typé
   ptr2: Pointer;   // non typé

Travailler avec des pointeurs typés est plus rapide qu'avec des pointeurs non typés.
Cependant les pointeurs non typés sont plus flexibles car non liés à un type particulier.
==Pointeur typé== Exemple d'utilisation d'un pointeur typé sur un type de donnée simple :

pascal
var
  a, b: Integer;  // "a" et "b" sont des variable de type Integer.
  p: ^Integer;    // "p" est un pointeur, il peut accueillir l'adresse d'une variable du type Integer.
begin
  a := 500;       // Affectation d'une valeur correcte à la variable "a".
  p := @a;        // La variable "p" de type Pointer reçoit maintenant l'adresse qui a été attribuée à la variable "a".
  b := p^;        // La variable "b" de type entier récupère la valeur à l'adresse données par "p" soit celle de la variable "a".
  p := nil;       // La variable "p" ne référence dorénavant plus rien.
                  // Le pointeur "p" pourra désigner une nouvelle adresse de mémoire.
end;

Warning: Tout tentative d'accès à l'espace mémoire via un pointeur valant Nil provoque une erreur à l'exécution.

Exemple d'utilisation d'un pointeur typé sur un enrtegistrement :

pascal
type
   TNewRecord = record
      Wert1: ShortString;
      Wert2: ShortString;
      Wert3: ShortString;
   end;
var
   p: ^TNewRecord;
begin
   New(p);                      // Allocation de mémoire pour un variable de type TNewRecord.
   p^.Wert1 := 'Test';          // Affectation d'un champ de donnée du TNewRecord par le pointeur.
   p^.Wert2 := 'TestTest';      // Affectation d'un champ de donnée du TNewRecord par le pointeur.
   p^.Wert3 := 'TestTestTest';  // Affectation d'un champ de donnée du TNewRecord par le pointeur.
   Dispose(p);                  // Libération de la mémoire allouée au TNewRecord.
                                // Les valeurs des champs de données sont alors perdues.
end;

Pointeur non typé

Exemple de définition d'un pointeur non typé :

pascal
var
   ptr2: Pointer;

Nouvelle allocation et libération de la mémoire :\

pascal
begin
  ...
  GetMem(ptr2,4);          // Integer est de 32 Bit, donc une taille de 4 octets
  Integer(ptr2^) := 2048;  // Affectation de la valeur
  FreeMem(ptr2);           // Libération de la mémoire
  ...
end;

Types de pointeurs typés prédéfinis

Il existe, par exemple dans Free Pascal et autres, les pointeurs prédéfinis suivants.

Exemple de définitions de pointeurs typés:
Exemple 1:

pascal
var
  ptr1: ^Integer;  // créé un pointeur typé pour le type de donnée Integer

Allocation et libération de mémoire :

pascal
begin
  ...
  New(ptr1);     // Réserve un emplacement de mémoire pour stocker sa valeur
  ptr1^ := 1;    // Affecte la valeur à l'emplacement mémoire
  Dispose(ptr1)  // libère la mémoire pour un usage ultérieur
                 // ce qui veur dire que la valeur est perdue
  ...
end;

Exemple 2:

pascal
function funTest: string;
var
  ptrZeiger: PInteger; // Type prédéfini de pointeur sur Integer dans Free Pascal
  { on pourrait déclarer de manière équivalente : ptrZeiger: ^Integer }
  intZahl: Integer; 
begin

  result:= '';
  intZahl := 4;  // une valeur pour la variable

  ptrZeiger := @intZahl; // le pointeur désigne maintenant la variable IntZahl
  result := Inttostr(ptrZeiger^); // Retourne la valeur désignée par ptrZeiger soit aussi celle de intZahl.

end;

Liens externes

Pour comprendre la notion de pointeur, vous pouvez lire cette excellente introduction aux pointeurs (fr)


From the Free Pascal wiki, page "Pointer/fr", as it stood on 2020-02-23 after a change by Trev, 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 2, last changed by WikiArchive .

Talk about this page

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