Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Pointer verändern


VT - So 11.01.04 14:08
Titel: Pointer verändern
Hi,

simple frage ;)

wie kann ich einen pointer wert erhöhen? also der eine pointer variable zeigt ja auf einen speicherbereich, nun will ich aber auf speicherbereich+1 zeigen lassen. in c++ geht das ohne probleme mit einem increment, aber delphi meckert hier rum. Ich denke mal ich kenn die Syntax nich. Wie mach ich das also?

Vielen Dank im Vorraus.

So lonG
Daniel


MSCH - So 11.01.04 14:26

also bei mir funktioniert das:


Delphi-Quelltext
1:
2:
var addr: PLongint; // zeiger auf Longint
inc(Addr)


grez
msch


KidPaddle - So 11.01.04 15:21

Oder


Delphi-Quelltext
1:
Ptr := POINTER(LONGINT(Ptr) + 1);                    


Gruß
KidPaddle

Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.


AndyB - So 11.01.04 15:31

Zitat:

Delphi-Quelltext
1:
2:
var addr: PLongint; // zeiger auf Longint
inc(Addr)


KidPaddle hat folgendes geschrieben:
Ptr := POINTER(LONGINT(Ptr) + 1);


Beide Codes machen was anderes. Der erste erhöht den Zeiger addr um 4 Bytes (= SizeOf(Longint) ). Der zweite Code erhöht den Zeiger um 1 Byte.


Motzi - So 11.01.04 15:51

Wieso erhöht die Version mit Inc() den Zeiger um 4 Bytes? Inc() hat eine überladene Version mit einem 2ten Parameter bei dem man angeben kann um wieviel erhöht werden soll, aber standardmäßig erhöht Inc() immer nur um eins...


VT - So 11.01.04 15:53

weil inc um sizeof(longint) erhöht


Motzi - So 11.01.04 16:03

Stimmt.. hab mir das grad im CPU-Fenster angeschaut.. der Compiler setzt den Inc() Aufruf so um, dass der Pointer um die Größe der Daten erhöht wird die der Pointer referenziert... das war mir neu.. :shock: :roll:


tommie-lie - So 11.01.04 20:34

Motzi hat folgendes geschrieben:
der Compiler setzt den Inc() Aufruf so um, dass der Pointer um die Größe der Daten erhöht wird die der Pointer referenziert...

Das ist in C übrigens auch so.