Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 29.12.02 22:31 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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?

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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.

ausblenden Quelltext
1:
GetMem(Pointers[High(Pointers)],SizeOf(TObjects));					


Um nun den Record anzusprechen, musst du den Pointer dereferenzieren und dann als TObjects casten:

ausblenden 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