Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer inkrementieren? (https://www.delphipraxis.net/19921-pointer-inkrementieren.html)

heiopei 10. Apr 2004 21:46


Pointer inkrementieren?
 
Abend,
in meinem programm (langzahlarithmetik) weise ich einem pointer ein statisches array
zu.


type ppnt: ^word;
var
test: array[0..10] of word;
pnt: ppnt;
...
//hauptprogramm
pnt := @test;
procedure bla(pnt: ppnt); //als parameter dürfen keine ^ zeichen übergeben werden !

nun möchte ich aber einer prozedur nur den pointer auf das erste feld des arrays geben
(die länge des arrays ebenfalls) und dann in dieser prozedur den pointer inkrementieren.
Wie schaffe ich das? (in der delhpi hilfe war nichts zu finden!!!) Geht da einfach
"inc(pnt)?

danke für hilfe,
heiopei

himitsu 10. Apr 2004 21:54

Re: Pointer inkrementieren?
 
ch glaub nicht, aber wenn, dann würde es wohl eher inc(pnt, 4) sein ;)

und bei
var test: packed array[0..10] of word; => inc(pnt, 2)

Chewie 10. Apr 2004 21:58

Re: Pointer inkrementieren?
 
Meine Delphi-Hilfe ist das sehr aussagekräftig:

Zitat:

Hinweis

Wenn X ein Zeigertyp ist, wird X um N-mal der Größe des Typs, auf den gezeigt wird, inkrementiert. Die folgenden Anweisungen

type

PMytype = ^TMyType;

und

var

P: PMyType;

Inc(P);

inkrementierten P um SizeOf(TMyType).

himitsu 10. Apr 2004 22:00

Re: Pointer inkrementieren?
 
hm? ich dachte inc (wenn es geht) erhöht die Position immer nur um ein Byte :gruebel:

heiopei 10. Apr 2004 22:07

Re: Pointer inkrementieren?
 
hallo,
danke für den hilfekomentar!!!(ich bin leider nur besitzer von delphi6 personal, und da ist die doku teilweise sehr mangelhaft -- oder ich bin zu blöd das aus dem englischen text zu entziffern)

ps:

zitat hitsumi:
hm? ich dachte inc (wenn es geht) erhöht die Position immer nur um ein Byte

bei pointern wird immer so viel erhöht, wie die "pointer-längen-definition ist"
also z.B ^Word der pointer springt immer um 4 Byte weiter(glaub das war die wordlänge)

servas,
heiopei

himitsu 10. Apr 2004 22:11

Re: Pointer inkrementieren?
 
eigentlich ist ein Word 2 Byte lang, da aber Delphi (Windows) alles wegen der Geschwindigkeit und es leichteren Zugriffs liebend gern an den Integergrenzen ausrichtet, sind es meistens 4 Byte (also jeweils 2 ungenutzte Byte)

Chewie 10. Apr 2004 22:24

Re: Pointer inkrementieren?
 
Zitat:

Zitat von himitsu
eigentlich eis ein Word 2 Byte lang, da aber Delphi (Windows) alles wegen der Geschwindigkeit und es leicheren Zugriffs alles liebend gern an den Integergrenzen ausrichtet, sind es meistens 4 Byte (also jeweils 2 ungenutzte Byte)

Das passiert zwar bei Records, aber wenn in der Hilfe steht, dass bei meinem Pointer immer entsprechend der Datengröße inkrementiert wird, wird das schon so sein. Welchen Sinn hätte es, immer 4/8/16 etc. Byte zu inkrementieren? Dann könnte man das direkte Zeiger inkrementieren gleich in die Mülltonne treten.

himitsu 10. Apr 2004 22:33

Re: Pointer inkrementieren?
 
Da könntest du recht haben ;)


und um nochmal zum Thema zu kommen - es geht also doch -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.

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