Programmiersprache Pascal

Unions

Eine Union ermöglicht es, Variablen zu definieren, die sich denselben Speicherbereich teilen.
Typischerweise besitzen diese Variablen unterschiedliche Typen.
Dies eröffnet die Möglichkeit, den Inhalt eines bestimmten Speicherbereichs auf verschiedene Weise zu interpretieren.

Der Begriff "Union" stammt aus der Programmiersprache C.
In Pascal leisten variante Records vergleichbares.

Außerhalb des Pascal Standards gibt es weitere Möglichkeiten:

Unions erlauben - bei sorgfältigem Einsatz - interessante systemnahe Operationen, stellen aber auch ein erhebliches Fehlerpotential dar.


Absolute Variablen

Absolute Variablen sind spezifisch für Turbo Pascal und Delphi:

  VAR var1 : typ1;
      var2 : typ2 ABSOLUTE var2;
                                         oder
  VAR var3 : typ3 ABSOLUTE absoluter_adresswert;
Beispiel:
  PROGRAM union;

  CONST n = 10;
  VAR s : STRING[n];
      b : ARRAY[0..n] OF BYTE ABSOLUTE s;
      r : RECORD
            len : BYTE;                         { Anzahl belegter Zeichen }
            str : PACKED ARRAY[1..n] OF CHAR;   { Zeichen }
          END ABSOLUTE s;
    i : INTEGER;

  BEGIN
    s := 'abcdefghij';
    Writeln(s);
    FOR i:=0 TO n DO
      Write(b[i]:4);
    Writeln;
    Writeln(r.len, ' ', r.str);
  END.
Testergebnisse:
  abcdefghij
    10  97  98  99 100 101 102 103 104 105 106
  10 abcdefghij
Beispiel 2:
  VAR crt_mode: BYTE ABSOLUTE $0040:$0049;
Die Angabe eines absoluten Adreßwertes kommt im wesentlichen nur für DOS in Frage, wo bestimmte Systeminformationen in stets gleichbleibenden Adressbereichen abgelegt werden.
Im obigen Beispiel kann über die Variable crt_mode der Bildschirmmodus abgefragt und manipuliert werden.

Ein absoluter Adreßwert wird angegeben durch

  segment:offset
segment und offset sind 16-Bit-Werte, die meist in Hexadezimaldarstellung angegeben werden.



P. Böhme, 31.08.1996