Autor Beitrag
elduchte
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 199

Win 2000, Win XP
Delphi 7
BeitragVerfasst: Fr 16.06.06 12:59 
Hallo,

ich möchte foldenden Code verstehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  feld = array[1..max] of integer;

var
  anfang : ^feld;

begin
....

end;


Was bedeutet das ^ ??

Danke
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 16.06.06 13:03 
Das ^ zeigt an, dass nicht etwa eine Variable des Typs Feld deklariert wurde, sondern ein Zeiger auf die Variable. Die Zeigervariable anfang beinhaltet also die Adresse der Variable auf dem Heap ;)

Um mit dieser Zeigervariable zu arbeiten, musst du nun das Dach hinter die Zeigervariable stellen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 
begin
 New(anfang); // speicher reservieren
  anfang^[1] := 10; 
 Dispose(anfang); //  und ganz wichtig, wieder freigeben
end;


NIL ist dir bestimmt auch schoneinmal begegnet, das bedeutet soviel wie Not In List, mit anderen Worten, der Zeiger zeigt ins Leere.

Mit Zeigern ist es also möglich, den Speicher, den mach braucht, zu reservieren und falls nicht mehr benötigt, wieder freizugeben. :P
elduchte Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 199

Win 2000, Win XP
Delphi 7
BeitragVerfasst: Sa 17.06.06 13:37 
Danke für die Erklärung.
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mo 19.06.06 14:23 
Danke auch für die Erklärung. Ich hab nach 3 jahren erst jetzt verstanden, was der vorteil ist.

Kann man auch statt dispose(anfang) folgende Zuweisung machen, um den speicher freizugeben?:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
anfang^ := nil;
//oder
anfang := nil;
//oder
FreeAndNil(anfang)
//...
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Mo 19.06.06 15:02 
Nö, geht nicht, weil freeandnil nur für objekte ist.

Was mit new angelegt wird, muss mit dispose freigegeben werden.
Was mit getmem angelegt wird, muss mit freemem freigegeben werden.
Was mit einem constructor angelegt wird, muss mit free freigegeben werden.

Beste Grüße
Tastaro