Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicheradressen von 2 Variablen Vertauschen? (https://www.delphipraxis.net/33274-speicheradressen-von-2-variablen-vertauschen.html)

tHeRiAn 4. Nov 2004 09:52


Speicheradressen von 2 Variablen Vertauschen?
 
Guten Morgen erstmal... :thumb:

in nachfolgendem Codeschnippsel will ich einfach nur die Adressen der beiden Variablen vertauschen, und nun die Frage...Warum gehts net...hab auch jetzt ne Zeit lang gesucht aber nix im Forum gefunden...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ax,by: integer;
begin
  ax := 1;
  by := 9;
  label1.Caption := IntToStr(ax)+'  '+IntToStr(by);
  tausche(@ax,@by);
  Label2.Caption := IntToStr(ax)+'  '+IntToStr(by);
end;

procedure TForm1.tausche(a,b: pointer);
var
  ptemp: pointer;
begin
  ptemp := a;
  a := b;
  b := ptemp;
end;
schonmal vielen Danke für die Antworten
mfg therian :spin:

Shaman 4. Nov 2004 10:14

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Hoi

Delphi-Quellcode:
procedure Swap(var A, B);
var
  C: Pointer;
begin
  Move(A, C, SizeOf(C));
  Move(B, A, SizeOf(C));
  Move(C, B, SizeOf(C));
end;
So sollte es gehen. Braucht dann auch kein @ beim Aufruf.

Gruss
Shaman

tHeRiAn 4. Nov 2004 10:30

Re: Speicheradressen von 2 Variablen Vertauschen?
 
hm, funzt net so wirklich...
braucht man in der deklaration denn keine Typen? und warum funzt meine Variante net...?

Shaman 4. Nov 2004 10:32

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Komisch, bei mir funktioniert es tip top...

HeZa 4. Nov 2004 10:58

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Hm..., die Adresse einer benannten Variablen kann man gar nicht ändern. Sieh dir mal die Fehlermeldung an wenn man deb folgenden Code ausführt.
Delphi-Quellcode:
procedure Tausche(var A, B);
var
  C: Pointer;
begin
  Move(A, C, SizeOf(C));
  Move(B, A, SizeOf(C));
  Move(C, B, SizeOf(C));
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ax,by: integer;
begin
  ax := 1;
  by := 9;
  label1.Caption := IntToStr(ax)+'  '+IntToStr(by);
  tausche(@ax,@by);
  Label2.Caption := IntToStr(ax)+'  '+IntToStr(by);
end;

Shaman 4. Nov 2004 11:01

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Delphi-Quellcode:
  tausche(@ax,@by);
Ohne @-Zeichen, das ist ja das Schöne.

Gruss
Shaman

Phantom1 4. Nov 2004 11:03

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Und noch eine möglichkeit:

Delphi-Quellcode:
procedure Swap(var X, Y: Pointer);
asm
    mov ecx, [edx]
    xchg [eax], ecx
    mov [edx], ecx
end;

tHeRiAn 4. Nov 2004 11:05

Re: Speicheradressen von 2 Variablen Vertauschen?
 
danke für die vielen Antworten....jetzt funktionierts

HeZa 4. Nov 2004 13:16

Re: Speicheradressen von 2 Variablen Vertauschen?
 
Hi Shaman

Zitat:

Zitat von Shaman
Delphi-Quellcode:
  tausche(@ax,@by);
Ohne @-Zeichen, das ist ja das Schöne.

nur das du damit nicht die Adresse sondern nur den Wert der Variablen getauscht hast. Versuch folgendes und staune:
Delphi-Quellcode:
oldAdr := Integer(@ax);
Swap(ax,by);
if oldAdr = Integer(@ax) then ShowMessage('War wohl nichts.');
Ciao HeZa


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.

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