![]() |
Zwei Variablen mit dem gleichen Speicher
Hallo,
ich habe zwei variablen, zwei Arrays, die eigentlich den gleichen Inhalt haben. Man hat mir nun gesagt, das es möglich ist das bei der Definition die Zweite variable auf den gleichen Speicher wie die Erste zugewiesen wird. Wie geht das?? mfg. TitanNano |
AW: Zwei Variablen mit dem gleichen Speicher
Meinst du einen Varianten Record oder 2 Variablen, welche den gleichen Speicher referenzieren?
|
AW: Zwei Variablen mit dem gleichen Speicher
Delphi-Quellcode:
type
TInt64Arr = array[0..3] of Int64; TByteArr = array[0..31] of Byte; var i64Arr: TInt64Arr; bArr: TByteArr absolute i64Arr; begin i64Arr[0] := 100; ShowMessage(IntToStr(bArr[0])); end; |
AW: Zwei Variablen mit dem gleichen Speicher
danke
|
AW: Zwei Variablen mit dem gleichen Speicher
ist das auch irgendwie möglich wenn sich Variable 1 in einem anderen Form befindet als variable 2??
|
AW: Zwei Variablen mit dem gleichen Speicher
Was genau möchtest Du denn erreichen?
|
AW: Zwei Variablen mit dem gleichen Speicher
Nein.
Das geht nur bei statischen Speicheradressen, ohne Umleitung. Bei einer Variable (Feld) in einer anderem Form, dann gibt es ja erstmal die Adresse zur Form und dann das Offset zur Variable. Gibt diese Variable als Property in Form1 frei und greife von Form2 aus darauf zu. |
AW: Zwei Variablen mit dem gleichen Speicher
Okay, das versteh ich nicht ganz, ab ich sag mal was ich will.
Ich habe dieses Array:
Delphi-Quellcode:
und das brauch ich in einem anderen Form noch einmal.
dates : array [0..11] of String;
|
AW: Zwei Variablen mit dem gleichen Speicher
Dann übergebe es als Property an die zweite Form.
|
AW: Zwei Variablen mit dem gleichen Speicher
Wie wäre es mit Pointern?
Die sind zwar beinahe so schön wie goto aber wenn man weiß was man macht. Gruß K-H |
AW: Zwei Variablen mit dem gleichen Speicher
Alternativ kann man in einer Variable mehrere "Views" abbilden.
Dazu baut man sich einen Record. In der Definition können per case-Befehl verschiedene Darstellung abgebildet werden. Alle Darstellungen müssen "gleich groß" sein. |
AW: Zwei Variablen mit dem gleichen Speicher
Zitat:
|
AW: Zwei Variablen mit dem gleichen Speicher
Zitat:
Delphi-Quellcode:
Kompiliert ohne Fehler und gibt "8" aus.
program recordtest;
{$apptype console} type TMyRecord = record case Boolean of True: (A: Integer; B: Integer); False: (C: Byte); end; begin Writeln(SizeOf(TMyRecord)); end. Edit: Nur falls jemand das falsche denkt: kompiliert mit Delphi 2007 (kompiliert mit FPC auch, dieser gibt aber 4 aus O.o ) Edit2: Ok... FPC hatte mich derwischt... man sollte natürlich in dem Modus kompilieren, in dem SizeOf(Integer)=4 ist... :wall: Gruß, Sven |
AW: Zwei Variablen mit dem gleichen Speicher
Da hab ich jetzt ein Problem, irgendwo hab ich gelesen, daß solche Konstruktionen für jede "case-Zweig" einen eigenen Speicherbereich belegen. Es soll sich also nicht um unterschiedliche "Views" des gleichen Speicherbereichs handeln ????
Oder hatte packed diese Auswirkung? Gruß K-H |
AW: Zwei Variablen mit dem gleichen Speicher
Wo willst du das gelesen haben?
Ab dem Case fängt jeder Zweig an der selben Stelle (Speicheradresse/Offset) an. Speicher wird soviel reserviert, wie der größte Zweig belegt. PACKED sagt nur, daß keine Speicherausrichtung verwendet werden soll. |
AW: Zwei Variablen mit dem gleichen Speicher
Keine Ahnung, war irgendein Buch oder Artikel über Records, angeblich sollten die Daten wie benötigt kopiert werden.
Gut, daß das Blödsinn ist! Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz