AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konstantes array in einem record initialisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantes array in einem record initialisieren

Ein Thema von Win32.API · begonnen am 8. Mai 2009 · letzter Beitrag vom 8. Mai 2009
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:18
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
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:19
Wenn es ein statisches Array ist, dann ja, ansonsten nicht.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#3

Re: Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:23
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:25
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
      ()
    );
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:29
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})
  );
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#6

Re: Konstantes array in einem record initialisieren

  Alt 8. Mai 2009, 12:30
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 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)
  );
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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