Entwickler-Ecke
Sonstiges (Delphi) - Pointer
Aya - So 29.12.02 22:31
Titel: Pointer
Hi,
hab mal ne Frage...
Ich muß ganz ehrlich zugeben das ich bisher NIE nen Pointer verwendet habe.. :oops:
Deswegen mal eine frage, ein Pointer ist doch eine Variable in der auf eine andere Variable gezeigt wird, ja???
Wenn ich nun eine Variable "MyObject" habe, welche vom Typ ein Record ist, und einen "Array of Pointer".
Verwenden tue ich das so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| type TObjects = Record [...] end;
var MyObject: TObjects; Pointers: Array of Pointer;
procedure Add(Obj: TObjects); begin SetLength(Pointers,Length(Pointers)+1); Pointers[High(Pointers)]:= ... //Hier soll jetzt ein Pointer auf das Objekt welches übergeben wird //gesetzt werden, wie? end;
procedure Main; var i: Integer; begin for i:=Low(Pointers) to High(Pointers) do Check(Pointers[i]); // Die Procedure Check verlang als übergabe Parameter ein TObjects! end; |
Das ist nur nen grobes beispiel, bitte nich nach dem sinn fragen.. hat hier in dem beispiel keinen *gg*
Au'revoir,
Aya~
smiegel - Mo 30.12.02 09:44
Hallo,
ein Zeiger ist eine Variable, die eine Speicheradresse angibt. Wenn ein Zeiger die Adresse einer anderen Variablen enthält, zeigt er auf die Position dieser Variablen im Speicher oder auf die Daten, die an dieser Position gespeichert sind. Bei einem Array oder einem anderen strukturierten Typ enthält der Zeiger die Adresse des ersten Elements der Struktur. Zeiger sind typisiert. Ist diese Adresse bereits vergeben, enthält der Zeiger die Adresse des ersten Elements.
Was willst Du jetzt wissen?
Udontknow - Mo 30.12.02 10:36
Hallo!
Du musst natürlich dann auch Speicher für diesen Record belegen, sozusagen den Record erstellen. Das machst du mit New bzw. Getmem.
Quelltext
1:
| GetMem(Pointers[High(Pointers)],SizeOf(TObjects)); |
Um nun den Record anzusprechen, musst du den Pointer dereferenzieren und dann als TObjects casten:
Quelltext
1:
| TObjects(Pointers[High(Pointers)]^).MeineRecordVariable:=3 |
Beim Beenden des Programmes oder beim Ändern des dynamischen Arrays musst du daran denken, den Speicherplatz, den jeder Record belegt, mit Freemem freizugeben.
Cu,
Udontknow
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!