Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zwei Variablen mit dem gleichen Speicher (https://www.delphipraxis.net/157312-zwei-variablen-mit-dem-gleichen-speicher.html)

TitanNano 7. Jan 2011 10:30

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

mkinzler 7. Jan 2011 10:34

AW: Zwei Variablen mit dem gleichen Speicher
 
Meinst du einen Varianten Record oder 2 Variablen, welche den gleichen Speicher referenzieren?

mleyen 7. Jan 2011 10:37

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;

TitanNano 7. Jan 2011 10:55

AW: Zwei Variablen mit dem gleichen Speicher
 
danke

TitanNano 7. Jan 2011 11:00

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??

DeddyH 7. Jan 2011 11:05

AW: Zwei Variablen mit dem gleichen Speicher
 
Was genau möchtest Du denn erreichen?

himitsu 7. Jan 2011 11:06

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.

TitanNano 7. Jan 2011 11:18

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:
dates : array [0..11] of String;
und das brauch ich in einem anderen Form noch einmal.

Luckie 7. Jan 2011 11:20

AW: Zwei Variablen mit dem gleichen Speicher
 
Dann übergebe es als Property an die zweite Form.

p80286 7. Jan 2011 12:42

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

generic 7. Jan 2011 13:22

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.

mkinzler 7. Jan 2011 13:24

AW: Zwei Variablen mit dem gleichen Speicher
 
Zitat:

Zitat von generic (Beitrag 1073007)
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.

Nennt man einen varianten Record ( was ich unter #1 ja schon erwähnt hatte)

JamesTKirk 7. Jan 2011 13:49

AW: Zwei Variablen mit dem gleichen Speicher
 
Zitat:

Zitat von generic (Beitrag 1073007)
Alle Darstellungen müssen "gleich groß" sein.

Nein, müssen sie nicht.

Delphi-Quellcode:
program recordtest;

{$apptype console}

type
  TMyRecord = record
    case Boolean of
      True: (A: Integer; B: Integer);
      False: (C: Byte);
  end;
   
begin
  Writeln(SizeOf(TMyRecord));
end.
Kompiliert ohne Fehler und gibt "8" aus.

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

p80286 7. Jan 2011 17:03

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

himitsu 7. Jan 2011 18:02

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.

p80286 7. Jan 2011 20:45

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