Announcement

Collapse
No announcement yet.

Ein Array of Record als Konstante definieren?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ein Array of Record als Konstante definieren?

    Hallo,

    ich möchte eine Art statische Liste erzeugen. Die Rahmenbedingungen sind:
    <P>- Ein Record (TArt) mit 2 enthaltenen unterschiedlichen Typen (String & Boolean)
    <P>- Ein Array vom Typ TArt
    <P>- Sowohl das Array als auch dessen Werte dürfen nicht verändert werden können?
    <P>Wie sähe die Syntax für dieses Konstrukt aus?

  • #2
    <pre><p><b>type</b>
    PArt = ^TArt;
    TArt = <b>packed record</b>
    s: <b>string</b>;
    b: Boolean;
    <b>end</b>;
    <p>
    <b>const</b>
    Arts: <b>array</b> [0..2] <b>of</b> TArt = (
    (s: 'Hello,'; b: True),
    (s: 'hack the planet '; b: False),
    (s: 'world!'; b: True)
    );
    <p>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b>
    Index: Integer;
    Text: <b>string</b>;
    <b>begin</b>
    Text := 'Arts = ';
    <b>for</b> Index := Low(Arts) <b>to</b> High(Arts) <b>do</b>
    <b>if</b> (Arts[Index].b) <b>then</b>
    Text := Text + ' ' + Arts[Index].s;
    ShowMessage(Text);
    <b>end</b>;<p></pre>

    - nic

    Comment


    • #3
      Danke für die schnelle Antwort

      PS: Für was wird der definierte Pointer <PRE>PArt = ^TArt;</PRE>verwendet?

      MFG
      Domini

      Comment


      • #4
        PArt ist wahrscheinlich nur auf Vorrat definiert.<br>
        Ich wuerde uebrigens statt "s: string" "s: PChar" verwenden. Das sollte bei der Benutzung keine Auswirkungen haben.<br>
        Wenn strings verwendet werden, so muessen sie heimlich in der initialization section der unit alloziiert werden. Das kostet natuerlich ein bischen Zeit und Speicherplatz

        Comment


        • #5
          Diese heimliche Initialisierung trifft aber NICHT auf Nico's Beispiel zu. Es ist sogar so das es hier egal ist ob String oder PChar, der Compiler speichert die Daten beider Type auf identische Weise, was mir auch logisch erscheint.

          Die heimliche Initialisierung wird nur für die Referenzrecords bei Resourcestrings durchgeführt (PResStringRec). D.h. ein Resourcestring wird zweimal initialisiert, zum Ersten beim Start werden die Importe initialisiert, und zum Zweiten wird beim ersten Zugriff auf den String dieser aus der Resource geladen.

          Gruß Hage

          Comment


          • #6
            @Dominic, ich deklariere zu einer Struktur grundsätzlich einen Zeiger auf selbige, auch wenn er erstmal, manchmal nie, gebraucht wird.

            - nic

            Comment


            • #7
              sozusagen gehört es zum "guten Ton&quot

              Comment

              Working...
              X