Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konstantes array in einem record initialisieren (https://www.delphipraxis.net/133776-konstantes-array-einem-record-initialisieren.html)

Win32.API 8. Mai 2009 12:18


Konstantes array in einem record initialisieren
 
Hallo,

gibt es in Delphi die Möglichkeit ein array in einem record zu initialisieren?


Delphi-Quellcode:
  TBla = record
    A: Word;
    B: array of word;
  end;

  const
    Bla: array [0..1] of TBla = (
      (A: 0; B: (0, 1)),
      ()
    );

--Win32

Dax 8. Mai 2009 12:19

Re: Konstantes array in einem record initialisieren
 
Wenn es ein statisches Array ist, dann ja, ansonsten nicht.

Win32.API 8. Mai 2009 12:23

Re: Konstantes array in einem record initialisieren
 
Hab ich mir schon fast gedacht, kann ich Delphi dazu bringen nur die ersten n Felder zu initialisieren?


Delphi-Quellcode:
TBla = record
    A: Word;
    B: array [0..255] of word;
  end;

  const
    Bla: array [0..1] of TBla = (
      (A: 0; B: (0, 1)), //Hier muesste man ja nun immer 256 Elemente initialisieren, ich brauche manchmal aber nur 128
      ()
    );
--Win32

Muetze1 8. Mai 2009 12:25

Re: Konstantes array in einem record initialisieren
 
Der Record ist nur eine Definition und es wird ihm kein Speicherplatz zugeordnet. Bei einer Const wird entsprechend irgendwo Speicher bereitgestellt, welcher initialisiert werden kann.

Wenn du nun ein konstantes Array in einem Record definierst, dann gibt es wiederrum keinen Speicherplatz für den Record und somit auch nicht für seine Elemente, also dem Array, somit auch keine Möglichkeit es vorzubelegen.

Schonmal so probiert?
Delphi-Quellcode:
TBla = record
    A: Word;
    B: array of word;
  end;

  const
    Bla: array [0..1] of TBla = (
      (A: 0; B: (0, 1)), //Hier muesste man ja nun immer 256 Elemente initialisieren, ich brauche manchmal aber nur 128
      ()
    );

nicodex 8. Mai 2009 12:29

Re: Konstantes array in einem record initialisieren
 
Alles was du nicht angibst, wird mit 0 (bzw. nil) initialisiert:
Delphi-Quellcode:
const
  Foo: array [0..1] of record
    Bar: Word;
    Dyn: array of Word;
  end = (
    (Bar: 42{; Dyn: nil}),
    ({Bar: 0; Dyn: nil})
  );

Win32.API 8. Mai 2009 12:30

Re: Konstantes array in einem record initialisieren
 
Gut, dann muss ich es wohl oder übel zur Laufzeit erzeugen und initialisieren.

Danke für Eure Antworten.

--Win32


//Edit:

Zitat:

Schonmal so probiert?
Das ist equivalent zu meinem ersten Versuch (siehe Post #1)


Zitat:

Zitat von nicodex
Alles was du nicht angibst, wird mit 0 (bzw. nil) initialisiert:
Delphi-Quellcode:
const
  Foo: array [0..1] of record
    Bar: Word;
    Dyn: array of Word;
  end = (
    (Bar: 42{; Dyn: nil}),
    ({Bar: 0; Dyn: nil})
  );

Das ist mir bewusst, es wäre aber schön, wenn auch die Array-Elemente, die ich nicht initialisiere, mit 0 initialisiert würden.

Delphi-Quellcode:
const
  Foo: array [0..1] of record
    Bar: Word;
    Dyn: array [0..2] of Word;
  end = (
    (Bar: 42{; Dyn: nil}),
    ({Bar: 0; Dyn: nil}),
    (Dyn: (1)), //Nur ein Element initialisiert -> Dyn: (1, 0, 0)
    (Dyn: (1, 2)), //Zwei Elemente initialisiert -> Dyn: (1, 2, 0)
    (Dyn: (1, 2, 3)), //Alle Elemente initialisiert -> Dyn: (1, 2, 3)
  );


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz