[Solved] array of record Frage

Für Fragen von Einsteigern und Programmieranfängern...
PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: [Solved] array of record Frage

Beitrag von PascalDragon »

Wichtig: auch wenn es konstant ist, ist es dennoch ein dynamisches Array. Das heißt der folgende Code gibt was unterschiedliches aus je nachdem, ob das Array dynamisch ist oder nicht:

Code: Alles auswählen

const
  ArrayStatic: array[0..1] of Integer = (1, 2);
  ArrayDyn: array of Integer = (1, 2);
  
begin
  Writeln(HexStr(@ArrayStatic));
  Writeln(HexStr(@ArrayStatic[0]));
  Writeln(HexStr(@ArrayDyn));
  Writeln(HexStr(@ArrayDyn[0]));
end.

Code: Alles auswählen

PS D:\fpc\git> .\testoutput\tarrtest.exe
004090E0
004090E0
004090F0
004090D8
FPC Compiler Entwickler

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: [Solved] array of record Frage

Beitrag von sstvmaster »

Socke hat geschrieben:
Fr 23. Okt 2020, 12:47
Ich habe es mal hier ergänzt: https://wiki.freepascal.org/Record#Constant_record
Danke!
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [Solved] array of record Frage

Beitrag von Mathias »

Socke hat geschrieben:
Fr 23. Okt 2020, 12:47
sstvmaster hat geschrieben:
Fr 23. Okt 2020, 11:56
Nachtrag: wäre das nicht auch was für das Wiki?
Ich habe es mal hier ergänzt: https://wiki.freepascal.org/Record#Constant_record
So was ähnliches hatte ich mal da erfasst.
https://wiki.freepascal.org/Const/de
Anstelle einer Array habe ich verschachtelte Records genommen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: array of record Frage

Beitrag von fliegermichl »

PascalDragon hat geschrieben:
Fr 23. Okt 2020, 10:25

Pascal geht hier eben einfach den Weg, der dir am wenigsten ins Knie schießt.
Ja ok, das ist wohl einer der Gründe weshalb wir alle hier Pascal so lieben :-)

LG Michael

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: array of record Frage

Beitrag von PascalDragon »

fliegermichl hat geschrieben:
Fr 23. Okt 2020, 19:23
PascalDragon hat geschrieben:
Fr 23. Okt 2020, 10:25

Pascal geht hier eben einfach den Weg, der dir am wenigsten ins Knie schießt.
Ja ok, das ist wohl einer der Gründe weshalb wir alle hier Pascal so lieben :-)
Eben 😁
FPC Compiler Entwickler

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [Solved] array of record Frage

Beitrag von Mathias »

Jeder Pascal-Programmierer kennt sicher die lästige Angabe, der Bezeichner, wen er eine Array mit Records in einer Konstanten definiert. Ich habe gerade einen Sinn der Sache gefunden.
Wen man case im Record verwendet, macht diese Angabe durchaus Sinn, wie folgendes Beispiel zeigt.

Code: Alles auswählen

type
  TArg = record
    Name: PChar;
    case byte of
      0: (valueP: PChar);
      1: (valueI: PtrUInt);
      2: (valueF: Single);
  end;
  TArgs = array of TArg;

var
  Arg: TArgs = (
    (Name: 'PChar';   valueP: 'Ich bin ein PChar'),
    (Name: 'Single';  valueF: 12.45),
    (Name: 'PtrUInt'; valueI: 1234));
Dies einfach so zur Info. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten