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

Delphi Discussion :

addresse d'un tableau dynamique.


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut addresse d'un tableau dynamique.
    Voila je voudrais savoir si il y a une différence entre :

    et
    et si oui laquelle.
    Parce dans un cas mon programme marche (pour le tableau statique) et dans l'autre......
    En fait j'utilise une fonction qui lit un tableau à partir de son adresse pour générer tensions.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Cela peut se remarquer avec la fonction BlockWrite ou CopyMemory

    Statique : "@Tableau ou "@Tableau[Low(Tableau)]"
    Dynamique : "@Tableau[0]" forcément !

    parce qu'un tableau statique c'est une variable en "accès direct" alors qu'un Tableau dynamique c'est un pointeur sur un tableau statique qui se déplace en mémoire selon les redimensionnement

    en théorie, tu n'aurais pas besoin de Addr ou @, ... en cast Pointer(Tableau) ça doit pouvoir le faire, j'ai tellement pris l'habitude du [0] que je n'ai jamais cherché si loin, j'ai tenté un jour de faire des pointeurs avec des tableaux dynamiques à trois dimensions (le setlength devient fastidieux) et cela n'a pas fonctionné comme je le voulais

    sinon, des pointeurs sur tableau statique (en gros l'ancienne méthode sous D3 pour avoir un tableau dynamique, comme dans la TStrings ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TFrmTestMemory.BtnPointerIntArray1024By256Click(Sender: TObject);
    type
      PMatriceInteger1024By255 = ^TMatriceInteger1024By255;
      TMatriceInteger1024By255 = array [0..1023,0..255] of Integer;
      PMatriceString1024By255 = ^TMatriceString1024By255;
      TMatriceString1024By255 = array [0..1023,0..255] of string[8];
    var
      Tableau : PMatriceInteger1024By255 ;
      TabStr : PMatriceString1024By255 ;
      PosH : Integer;
      PosV : Byte;
    begin
        GetMem(Tableau, 1024*256*4); // faut absoluement alouéé la taille du Type !
        for PosH := 0 to 1023 do
        begin
          for PosV := 0 to 255 do
          begin
            Tableau^[PosH][PosV]:= PosH*PosV;
          end; 
        end;
        FreeMem(Tableau);
     
        GetMem(TabStr, 1024*256*(8+1)); // faut absoluement alouéé la taille du Type !
        for PosH := 0 to 1023 do
        begin
          for PosV := 0 to 255 do
          begin
            TabStr^[PosH][PosV]:= IntToStr(PosH) +'_'+ IntToStr(PosV);
          end;
        end;
        FreeMem(TabStr);
    end;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    Un grand merci : ça marche!!
    j'ai juste rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addr(tableaudynamique[0])
    et du coup il est bien reconnu!!

    Par contre n'étant pas informaticien je n'ai pas très bien saisi la nuance entre les deux écritures.....
    mais bon

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Par contre n'étant pas informaticien je n'ai pas très bien saisi la nuance entre les deux écritures.....
    pour le @ et Addr ? c'est la même chose, sauf que Addr n'est pas soumis à une option de compilation, que peu de monde doit s'occuper ...

    sinon Tableau c'est le Tableau en lui même pour SetLength par exemple
    Tableau[0], c'est le premier item du tableau, et c'est toute une histoire entre les pointeurs qui indiquent une zone mémoire qui commence à [0]

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 19h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 09h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 15h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 09h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 17h43

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