ADDR |
Adresse |
---|---|
Free Pascal | System |
Syntaxe
Function Addr(x:variable, fonction ou procédure):Pointer; |
Paramètres
Nom | Description |
---|---|
x | Ce paramètre permet d'indiquer le nom de la variable, fonction ou procédure dont on veut connaître l'adresse |
Retour
Valeur | Description |
---|---|
adresse | Ces valeurs permettent d'indiquer une adresse de pointeur vers l'élément demandé. |
Description
Cette fonction retourne le pointeur d'une adresse de variable, fonction ou procédure.
Remarques
- On peut obtenir le même résultat que cette fonction en utilisant l'opérateur «@», lequel retourne un pointeur typé.
- Addr est une fonction de compatibilité historique : La fonction Addr est une relique des anciennes versions de Pascal, principalement utilisée dans Turbo Pascal et Delphi en mode compatibilité. Elle renvoie l'adresse d'une variable ou d'une procédure, mais son utilisation est obsolète dans les versions modernes de Free Pascal, où l'opérateur @ est préféré. Free Pascal maintient cette fonction pour assurer la compatibilité avec du code ancien.
- Addr peut être utilisé avec des variables et des procédures : La fonction Addr peut être appliquée aussi bien aux variables qu'aux procédures/fonctions, permettant de récupérer leur adresse mémoire. Cela est utile dans des contextes comme les pointeurs de fonctions ou les appels à des API système nécessitant des adresses de mémoire. Exemple :
- Addr peut poser des problèmes de typage strict : Avec Free Pascal en mode strict, l'utilisation de Addr peut parfois entraîner des erreurs de typage, notamment si elle est utilisée avec des types fortement typés comme procedure of object. Il est alors recommandé d'utiliser @ et de s'assurer que les types correspondent exactement.
- Addr est parfois nécessaire dans des contextes d'interfaçage bas niveau : Lorsqu'on travaille avec des API en assembleur, des bibliothèques en C, ou des appels système, la fonction Addr peut être utile pour passer des adresses mémoire explicites. Par exemple, lorsqu'on passe des pointeurs de procédures à des fonctions en C via des appels cdecl, Addr peut être utilisé à la place de @ pour éviter certaines incompatibilités.
- Addr ne doit pas être utilisée avec des variables locales après la sortie d'une fonction : Si une variable locale est déclarée à l'intérieur d'une procédure et que son adresse est stockée à l'aide de Addr, l'accès à cette adresse après la fin de l'exécution de la procédure est dangereux, car la variable peut être écrasée par d'autres données. Cela peut entraîner un comportement indéfini. Exemple problématique :
- Addr n'est pas nécessaire pour la compatibilité avec les pointeurs modernes : Dans Free Pascal, l'utilisation des pointeurs modernes (typage fort avec ^) ne nécessite pas Addr. Il est préférable d'utiliser @ et des références explicites plutôt que Addr, étant principalement un alias inutile en mode moderne. Exemple avec un pointeur :
- Addr ne fonctionne pas avec les méthodes de classe : Contrairement à @, pouvant être utilisé avec des méthodes de classe, la fonction Addr ne fonctionne pas correctement avec les méthodes liées aux objets (procedure of object). Cela signifie que si une méthode est associée à un objet, Addr ne peut pas être utilisé pour obtenir son adresse. Exemple non valide :
Ici, GetPointer pointe vers une variable n'existant plus après la sortie de la fonction.
Dans ce cas, @Obj.MyMethod doit être utilisé au lieu de Addr.
Exemple
Voici quelques exemples permettant d'afficher la valeur contenu dans X en passant par les variables Y et Z à l'aide de la fonction «Addr» :

on obtiendra le résultat suivant :
Y=10Z=10
Y=11
Z=11
Voir également
Dernière mise à jour : Samedi, le 18 juillet 2015