Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi einer variable eine adresse zuweisen (https://www.delphipraxis.net/38099-einer-variable-eine-adresse-zuweisen.html)

NicoDE 14. Jan 2005 17:52

Re: einer variable eine adresse zuweisen
 
Du suchst Delphi-Referenz durchsuchenabsolute.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Foo: Integer;
  Bar: Integer absolute Foo;
begin
  Foo := 42;
  ShowMessage(IntToStr(Bar));
end;
Ich würde trotzdem den von Sprint gezeigten Weg empfehlen.

Matze 14. Jan 2005 17:56

Re: einer variable eine adresse zuweisen
 
Wenn ich sage:

Delphi-Quellcode:
a := 5;
b := a;
Dann verweist doch b auch nur auf die Speicheradresse von a. Zumindest meint dies mein Informatiklehrer, ist das nicht korrekt?

Oxmyx 14. Jan 2005 18:01

Re: einer variable eine adresse zuweisen
 
Zitat:

Zitat von Matze
Wenn ich sage:

Delphi-Quellcode:
a := 5;
b := a;
Dann verweist doch b auch nur auf die Speicheradresse von a. Zumindest meint dies mein Informatiklehrer, ist das nicht korrekt?

Nein, das ist falsch. "a" und "b" haben verschiedene Speicheradressen, in denen jeweils der Wert 5 steht. Bei jeder Zuweisung von Variablen wird die komplette Variable kopiert (auch wenn es ein Record ist).

Eine Speicheradresse weist man mit dem Adress-Operator an eine Zeigervariable zu:
Delphi-Quellcode:
var
  a: Integer;
  pa: PInteger;
begin
  a := 5;
  pa := @a; // pa zeigt auf die Speicheradresse von a
end;

c113plpbr 14. Jan 2005 18:04

Re: einer variable eine adresse zuweisen
 
Zitat:

Zitat von Matze
Wenn ich sage:

Delphi-Quellcode:
a := 5;
b := a;
Dann verweist doch b auch nur auf die Speicheradresse von a. Zumindest meint dies mein Informatiklehrer, ist das nicht korrekt?

Wenn das so wäre, würde, wenn du b z.B. den wert 1 übergibst sich doch auch der wert von a ändern, oder? und das tut er nicht ... (zum glück ... :) )

Absolute würde warscheinlich gehen, wenn dies eine variable aus meiner DLL wäre, was aber nicht so ist. Und so wie ich das sehe, kann man mit absolute zwar exakt das tun was ich will, aber nur mit variablen, die in meinem quellcode deklariert sind ... oder geht da etwa was mit adressen?

@Oxmyx: lies mal die anderern posts, und du wirst erfahren, dass ich dereferenzierungen im code vermeiden will, womit mir ein pointer darauf nicht besonders viel weiter hilft.

ciao, Philipp

Oxmyx 14. Jan 2005 18:11

Re: einer variable eine adresse zuweisen
 
Zitat:

Zitat von c113plpbr
@Oxmyx: lies mal die anderern posts, und du wirst erfahren, dass ich dereferenzierungen im code vermeiden will, womit mir ein pointer darauf nicht besonders viel weiter hilft.

ciao, Philipp

Ich wollte lediglich die Annahme von Matze korrigieren, dass Zuweisungen keine Kopieroperationen wären.

stefan2005 14. Jan 2005 18:24

Re: einer variable eine adresse zuweisen
 
hi,
ich hatte mal gehört, dass man z.B. einer Integer Variable keine neue Addresse zuweisen kann, da ein Integer nicht dynamisch, sondern schon vom Compiler im Code erstellt wird.

Sprich: Der Compiler legt bei der Kompilierung schon 4 Bytes für einen Integer in der EXE Datei an.

ich weiss aber nicht, ob dies auch auf den Delphi Compiler zutrifft und bitte um Berichtigung, wenns nicht stimmt.

cu,
stefan2005

SirThornberry 14. Jan 2005 18:48

Re: einer variable eine adresse zuweisen
 
eine neue adresse zuordnen kann man nicht. Deswegen arbeitet man in so einem fall ja auch mit Pointern, "absolute" und/oder propertys

c113plpbr 14. Jan 2005 18:55

Re: einer variable eine adresse zuweisen
 
Nagut, dann muss ich mich wohl geschlagen geben ... :|

trotzdem danke für eure ratschläge ... ciao & thx, Philipp

SirThornberry 14. Jan 2005 19:30

Re: einer variable eine adresse zuweisen
 
was stört dich an der "absolute" Variante?

c113plpbr 14. Jan 2005 20:26

Re: einer variable eine adresse zuweisen
 
Zitat:

Zitat von SirThornberry
was stört dich an der "absolute" Variante?

Es stört mich nichts daran, nur ist sie leider hier nicht möglich, weil die variablen auf die ich zugreife, nicht in meinem Quellcode deklariert sind. Und absolute funktioniert nur bei variablen, die in meinem Quellcode deklariert wurden, und nicht für diese zu denen ich nur einen pointer habe (bzw. eine statische adresse). Ansonsten wäre es perfekt.

ciao, Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz