![]() |
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. |
Re: Vertauschen von Pointern in einer Funktion
@Manuel
Delphi-Quellcode:
Gruß Hawkeye
procedure Surprise (var x);
begin ShowMessage (IntToStr(SizeOf(x))); end; |
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. |
Re: Vertauschen von Pointern in einer Funktion
Zitat:
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. |
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 23:07 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