Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vertauschen von Pointern in einer Funktion (https://www.delphipraxis.net/88069-vertauschen-von-pointern-einer-funktion.html)

brechi 9. Mär 2007 17:21

Re: Vertauschen von Pointern in einer Funktion
 
Um es mal aufzulösen:

Pointer kannst du so nicht vertasuchen weil sie Fest im Programmcode drinstehen.
Alle Methoden die hier gezeigt wurden beruhen auch nur darauf den kompletten Speicher zu tauschen.

@3_of_8: Mach das mal mit Strings unterschiedlicher größe, dann wirst Spass bekommen.

@Threadersteller, einfach ganz normal Swappen wie man das immer macht d.h. mit einer TemVariable, das geht soagr ohne Probleme für Strings.

Hawkeye219 9. Mär 2007 17:57

Re: Vertauschen von Pointern in einer Funktion
 
@Manuel

Delphi-Quellcode:
procedure Surprise (var x);
begin
  ShowMessage (IntToStr(SizeOf(x)));
end;
Gruß Hawkeye

3_of_8 9. Mär 2007 17:59

Re: Vertauschen von Pointern in einer Funktion
 
Okay, das geht dann wohl nicht. Dann machen wirs halt so, wir sind ja flexibel:
Delphi-Quellcode:
procedure SwapMemory(var a, b; size: Cardinal);
var I, max: Cardinal;
begin
  I:=0;
  max:=(ALength div 4)*4-1;
  while I<=max do
  begin
    PCardinal(Cardinal(ADst)+I)^:=PCardinal(Cardinal(ASrc)+I)^;
    inc(I, 4);
  end;
  case ALength+4-I of
    1: PByte(Cardinal(ADst)+I)^:=PByte(Cardinal(ASrc)+I)^;
    2: PWord(Cardinal(ADst)+I)^:=PWord(Cardinal(ASrc)+I)^;
    3:
      begin
        PWord(Cardinal(ADst)+I)^:=PWord(Cardinal(ASrc)+I)^;
        PByte(Cardinal(ADst)+I+2)^:=PByte(Cardinal(ASrc)+I+2)^
      end;
  end;
end;


@brechi: Solange es keine statischen Strings sind, dürfte das kein Problem sein.

Alexander Roth 9. Mär 2007 21:09

Re: Vertauschen von Pointern in einer Funktion
 
Zitat:

Zitat von brechi
Um es mal aufzulösen:

Pointer kannst du so nicht vertasuchen weil sie Fest im Programmcode drinstehen.
Alle Methoden die hier gezeigt wurden beruhen auch nur darauf den kompletten Speicher zu tauschen.

@3_of_8: Mach das mal mit Strings unterschiedlicher größe, dann wirst Spass bekommen.

@Threadersteller, einfach ganz normal Swappen wie man das immer macht d.h. mit einer TemVariable, das geht soagr ohne Probleme für Strings.

Ok. Das war nämlich die zentrale Frage. Es wäre nämlich sehr elegant gewesen, nur die Pointer zu tauschen. Wenn dies nicht geht ist wohl die normale Temp Variable das einfachste.

Danke für all eure Beiträge.

Gruß Alexander :hi:



PS: 3_of_8's Methode schaue ich mir mal genau an, damit ich dort auch jeden Punkt verstehe.

3_of_8 9. Mär 2007 21:15

Re: Vertauschen von Pointern in einer Funktion
 
Also, ein dynamischer String ist ein array of Char. Ein array of Char ist ein Zeiger auf eine Folge von Chars, davor steht die Länge. Jetzt lege ich einfach den Pointer des ersten Arrays auf den des zweiten Arrays und vice versa. Wo soll da ein Problem sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.
Seite 2 von 2     12   

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