IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

Modification du stockage d'une variable avec la directive absolute


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut Modification du stockage d'une variable avec la directive absolute
    Bonjour,

    jusqu'à présent je ne m'étais jamais pris la tête avec ça, mais aujourd'hui j'ai décidé (d'essayer) de comprendre cette déclaration, trouvée dans un programme de quelques lignes pour bricoler avec un TreeView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      lWinControl: TWinControl absolute aComponent;
    Je me suis basé sur la redoutable (humour) aide de FreePascal et je suis tombé sur ça :
    The sixth form declares a variable curterm6, and tells the compiler that it is stored in the same location as another variable (curterm1).

    En français :
    La sixième forme déclare une variable curterm6 et indique au compilateur qu'elle est stockée au même emplacement qu'une autre variable (curterm1).
    Oui, vous avez bien lu (et moi aussi) : ...elle est stockée au même emplacement qu'une autre...

    Alors question : d'un strict point de vue technique, qu'est-ce que ça veut dire, "au même emplacement" ?
    La valeur de la variable curterm6 va aller remplacer la valeur de la variable curterm1, tout simplement tout bêtement ?
    Mais à quoi ça sert ?
    À économiser de l'espace mémoire en remplaçant curterm1 par curterm6 ?

    Pourquoi je découvre ça à notre époque de teradata ad nauseam et pas quand je bricolais avec D1 en 16 bits et juste quelques Mo de mémoire ?

    Merci pour votre éclairage,

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Oui, vous avez bien lu (et moi aussi) : ...elle est stockée au même emplacement qu'une autre...

    Alors question : d'un strict point de vue technique, qu'est-ce que ça veut dire, "au même emplacement" ?
    Pour moi, cela veut dire Exactement AU MÊME EMPLACEMENT MÉMOIRE soit à la même adresse mémoire.
    NB. Cela ne veut rien dire à propos des déclarations de ces variables on peut avoir de l'entier et du flottant et selon l'un ou l'autre on lira un entier ou un flottant.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Var A : INTEGER;
         B : FLOAT absolute A;
    Veut dire : A et B partagent la même adresse mémoire.
    Si j'utilise A alors je lis un entier
    Si j'utilise B alors je lis un flottant (réel) (avec la même valeur que A cependant comme un réel).

    Personnellement je préfère les enregistrements (RECORD) avec des zones variables exemple (mais des fois) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TYPE
        VARAB : RECORD
            Case of boolean
            True : A : Integer;
            False: B : Float;
        end;
    Cordialement

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Ce sont effectivement deux déclarations qui pointent sur la même adresse mémoire. Il faut simplement prendre absolute comme une forme de transtypage.

    On voit principalement cette construction pour interpréter un paramètre dans un type différent (voire un argument non typé). On pourrait par exemple avoir une fonction recevant un entier non signé et vouloir le traiter comme signé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure Proc(aValue :cardinal);
    var
      IntValue : integer absolute aValue;
    Avoir un tableau à deux dimensions [1..10,1..10] mais pour un besoin précis vouloir le traiter en ligne [1..100].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var
      array10x10 : array[1..10,1..10] of integer;
      array100   : array[1..100] of integer absolute array10x10;
    C'est effectivement un peu le même principe qu'un case of dans un record (mais attention à la compatibilité, entier <> réel).

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    OK, merci les copains.

    J'espère seulement ne pas faire de cauchemars cette nuit,


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Modification d'une variable avec un bouton TKinter
    Par Yobeco dans le forum Tkinter
    Réponses: 15
    Dernier message: 05/04/2021, 18h17
  2. Copier coller image d'un graphique avec stockage dans une variable
    Par antonysansh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/02/2017, 16h00
  3. Réponses: 13
    Dernier message: 16/01/2006, 15h48
  4. Utilisation d'une variable avec l'instruction 'USE'
    Par florantanplan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/11/2005, 10h39
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo