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 Pointer : Eine Speicherstelle weiterrücken (https://www.delphipraxis.net/18010-pointer-eine-speicherstelle-weiterruecken.html)

atreju2oo0 13. Mär 2004 08:19

Re: Pointer : Eine Speicherstelle weiterrücken
 
Source:
inc(PByte(pinput));

Dann ist also festgelegt, dass der Compiler jeden Pointer hintereinander speichert?
Was ist wenn zum Beispiel Pointer1 an einer anderen Stelle gespeichert wird als Pointer2?
Dann geht der inc Algorithmus doch nicht mehr, oder?
Wäre nett wenn mich mal jemand aufklärt... Ist ja doch nen bissle kürzer als meine Variante... :gruebel:

SirThornberry 13. Mär 2004 09:33

Re: Pointer : Eine Speicherstelle weiterrücken
 
sollte auch so gehen
Delphi-Quellcode:
Integer(pInput) := Integer(Pinput) + 1;

Christian Seehase 13. Mär 2004 10:52

Re: Pointer : Eine Speicherstelle weiterrücken
 
Moin atreju,

es wird nicht jeder Pointer hintereinander gespeichert, sondern es geht darum wie man an Daten herankommt, die im Speicher unmittelbar hintereinander liegen.
Dann benötigt man nur die Adresse des ersten Byte, und kann dann, durch ein einfaches Inc auf das nächste Element kommen.
Da die Variable pinput ein untypisierter Pointer ist, "weiss" der Compiler nicht, wie der den Inc Befehl umsetzen soll, da die Compiler Magic auf Grund des Typs des Pointers weiss, um wieviel der Wert erhöht werden muss.
In dem Beispiel handelt es sich um eine Pointer auf einzelne Bytes, und der Typecast mit PByte(...) dient nur dazu dem Compiler mitzuteilen, dass er den Wert der Variablen um 1 hochzählen soll.
Hätte man geschrieben

Delphi-Quellcode:
inc(PDWORD(pinput));
würde pinput um 4 erhöht werden, da ein DWORD eben 4 Byte belegt.

Das funktioniert dann genauso mit Pointern auf beliebige Datenstrukturen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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