![]() |
Zeigerarithmetik
Hallo,
ich möchte bei einem Pointer gerne einen Offset hinzuaddieren, bekomme es aber nicht hin. So habe ich es versucht:
Delphi-Quellcode:
Kommt leider die Fehlermeldung:
pDataWithOffSet := pData + (i * $10000);
Zitat:
Wie mache ich es richtig? Vielen Dank |
Re: Zeigerarithmetik
Benutze Increment. Beachte aber, dass die Funktion um die Größe des Pointer (bei typisierten Pointer) erhöht!
Ich gehe in deinem Beispiel mal davon aus, dass pDataWithOffset ein PByte oder PChar ist, also ein Pointer auf ein Byte.
Delphi-Quellcode:
Wenn nicht, dann einfach den Wert einfach durch die Grösse deines Datentyps teilen. Also so:
pDataWithOffSet := pData;
Inc(pDataWithOffset, i * $10000);
Delphi-Quellcode:
pDataWithOffSet := pData;
Inc(pDataWithOffset, (i * $10000) div sizeof(pDataWithOffset^)); |
Re: Zeigerarithmetik
ich caste den Pointer einfach immer zu einem Cardinal denn ein Pointer ist ja nichts anderes als eine ausschließlich positive Speicheradresse.
|
Re: Zeigerarithmetik
Zitat:
|
Re: Zeigerarithmetik
wohl war, die Sicherheitsmechanismen werden da außer kraft gesetzt - Aber das ist ja bei Pointerarthmetik sowieso der Fall wenn man diesen dann irgendwo hin zeigen lässt wo eigentlich nix mehr ist.
|
Re: Zeigerarithmetik
bei PChar, PAnsiChar und PWideChar kann man sowas machen.
Delphi-Quellcode:
allerdigns wird da immer in Einheitengröße addiert
pDataWithOffSet := PAnsiChar(pData) + (i * $10000);
PWideChar(P) + 9 = Cardinal(P) + (2 * 9) .. da SizeOf(WideChar) = 2 also in Bezug auf Delphi 2008 PChar besser nicht verwenden (wegen Standardunterstüzung von Unicode ... PChar = PWideChar) |
Re: Zeigerarithmetik
In Delphi 2008 soll übrigens ein Compilerschalter kommen, der Zeigerarithmetik erlaubt. Das stand in irgendeinem Codegear-Blog - dort hieß es übrigens auch, dass es ursprünglich ein Bug war, dass Inc für Zeiger funktioniert, dieser "Bug" dann aber aufgrund des Aufschreis der Beta-Tester nicht gefixt wurde.
|
Re: Zeigerarithmetik
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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