AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einführung in Pointer

Ein Thema von El Cattivo · begonnen am 7. Apr 2005 · letzter Beitrag vom 18. Jan 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
El Cattivo

Registriert seit: 17. Apr 2004
Ort: Nieste bei Kassel
19 Beiträge
 
Delphi 5 Standard
 
#1

Einführung in Pointer

  Alt 7. Apr 2005, 13:49
Hallo,
ich habe zu meiner Frage schon das Forum durchsucht aber wie auch bei google ohne nennenswerten Erfolg. Deswegen hoffe ich, dass ihr mir helfen könnt. Es geht um Pointer und zwar ganz allgemein. Ich kann mit dem Begriff schon etwas anfangen und ich hab auch ne ungefähre Ahnung wozu Pointer nützlich sind. Aber ich bräuchte eine kleine Anleitung wie ich Pointer benutze. Einige Befehle kenne ich schon, ich weiß nur nicht wie ich die anwenden soll und ich bin mir auch nicht sicher ob die so richtig sind.
Wenn "wurzel" ein Zeiger ist dann gilt:
wurzel:=NIL; Zeiger "erden" oder "ins Nichts Zeigen lassen"
new(wurzel); Speicherplatz für "wurzel" reservieren.
wurzel:=123; dem Ziel der Addresse "wurzel" wird ein Wert zugeweisen.
dispose(wurzel); gibt den Speicherplatz wieder frei.
Wenn "wurzel" ein typisierter Zeiger ist, dann wird er folgendermaßen deklariert:
Delphi-Quellcode:
type PInt=^integer;
var wurzel: PInt;
der Abgespeicherte Wert lässt sich auch so darstellen (?)
wurzel^ Stimmt das soweit? Ich kann damit nicht sehr viel anfangen. Wie setze ich diese Befehle ein? Ich habe leider auch kaum Quelltexte gefunden und erst recht keine erläuterten. Ich wäre also sehr dankbar wenn mir jemand eine kleine Einführung in Sachen Pointer geben könnten. Vielleicht auch nen Link wo das anschaulich beschrieben wird.
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:00
Wenn der Zeiger "wurzel" auf etwas zeigt...
if (wurzel <> nil) then

Zeiger "ins Nichts Zeigen lassen"
wurzel := nil;

Speicherplatz für "wurzel" reservieren.
GetMem(wurzel);

dem Ziel der Addresse "wurzel" wird ein Wert zugeweisen.
wurzel := ^MeinObjekt;

gibt den Speicherplatz wieder frei.
FreeMem(wurzel);

Wenn "wurzel" ein typisierter Zeiger ist, dann wird er folgendermaßen deklariert:
type PInt = ^Integer;
var wurzel: PInt;

der Abgespeicherte Wert lässt sich auch so darstellen
wurzel^
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#3

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:06
Schau mal beim Luckie nach.


www.Luckie-Online.de


dort gibt es viele Programme (natürlich mit Quellcode)

Und viele Tuturials mit und sogar einige speziel über Pointer.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:26
@ste_ett: Anstelle von GetMem und FreeMem ist New und Dispose zu bevorzugen (steht auch in der Delphihilfe wenn du diese mal zu GetMem aufrufst)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#5

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:33
hmmm?

"GetMem und FreeMem"

Ja, da steht was in der OH, aber ich verwende auch noch diese ... hab irgendwie nicht rausbekommen, wie man bei New die Speichergröße angibt, welche man haben möchte.
Außerdem arbeitet Delphi selber auch damit und nicht mit new/dispose ... jedenfalls kommt getmem/freemem ziehmlich oft iim Source der Delphi-Komponenten vor
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#6

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:38
Zitat von himitsu:
hmmm?

"GetMem und FreeMem"

Ja, da steht was in der OH, aber ich verwende auch noch diese ... hab irgendwie nicht rausbekommen, wie man bei New die Speichergröße angibt, welche man haben möchte.
Außerdem arbeitet Delphi selber auch damit und nicht mit new/dispose ... jedenfalls kommt getmem/freemem ziehmlich oft iim Source der Delphi-Komponenten vor
Die Größe für den Speicherbereich richtet sich automatisch nach der benötigten Größe des Objektes, das du bei "New(Objekt);" angibst.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
El Cattivo

Registriert seit: 17. Apr 2004
Ort: Nieste bei Kassel
19 Beiträge
 
Delphi 5 Standard
 
#7

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:45
Ok, die Befehle sind mir dann also klar. Aber wenn ich damit etwas sinnvolles machen will, zum Beispiel eine Kette, dann hab ich schon wieder Schwierigkeiten. Dann sieht das zum Beispiel so aus:
Delphi-Quellcode:
type Zeiger=^Element
Element:record
rechst:zeiger;
inhalt:integer;
end;
var wurzel, lauf: zeiger;
begin
wurzel:=NIL;
new(lauf);
lauf^.rechts:=NIL;
//"lauf^.rechts" ist also ein Zeiger, der vom Ziel von Zeiger "lauf" ausgeht und erstmal ins Leere zeigt?//
lauf^.inhalt:=1;
//ist "lauf^.inhalt" das selbe wie "lauf^"?//
Bis hierhin hätte man also einen Zeiger "lauf" mit "lauf^"=1, einen Zeiger "wurzel", der ins Leere zeigt und einen Zeiger "lauf^.rechts", der von "lauf^" aus ins Leere zeigt.
Nun gehts weiter:
Delphi-Quellcode:
wurzel:=lauf^;
new(lauf);
lauf^.rechts:=wurzel;
lauf^.inhalt:=2;
wurzel:=lauf;
der Zeiger "wurzel" zeigt jetzt auf einen Speicherplatz in dem der selbe Wert wie "lauf^" (1) gespeichert ist. der Zeiger "lauf" bekommt einen neuen Speicherplatz reserviert. der Zeiger "lauf^.rechts", der vom Ziel von "lauf" ausgeht zeigt jetzt auf den selben Speicherplatz wie "wurzel". "lauf^.inhalt" wird überschrieben. Der Inhalt ist nun ein anderer, "lauf" stellt aber immer noch die selbe Addresse dar.
Wenn das so alles richtig war, dann hätte ich noch ne Frage. Wollte man die Kette um eine 3 erweitern, müsste man dann mit einem "lauf^.rechts^.rechts"-Zeiger arbeiten? gibt es so einen Zeiger überhaupt?

Danke für den link, ich denke der hilft mir auch weiter.

Ich denke für mich ist das noch nicht so relevant ob ich new und dispose oder Getmem und freemem benutze. So komplex sind meine Programme nicht gerade *g*...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#8

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:52
@El Cattivo

OK, das mag ja nicht schlecht sein, aber was macht dann New bei dem Typen Pointer und PChar, die haben ja keine feste Größe und für sowas brauchte ich diese Funktionen ja
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Einführung in Pointer

  Alt 7. Apr 2005, 14:56
für PChars gibt es "StrAlloc"
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
El Cattivo

Registriert seit: 17. Apr 2004
Ort: Nieste bei Kassel
19 Beiträge
 
Delphi 5 Standard
 
#10

Re: Einführung in Pointer

  Alt 7. Apr 2005, 15:41
Also das mit dem new hab ich so verstanden.
Wenn p nen Pointer ist und n ne gespeicherte variable, dann weist man mit p:=@n p die Addresse von n zu. Wenn p noch auf keinen Wert zeigt, man aber bereits auf den Raum zugreifen will, auf den der Pointer zeigt, dann schreibt man new(p). Ich schätze mal, wenn p:=NIL wäre, dann könnte man nicht p^.rechts schreiben.
Aber eigentlich wollte ich hier die Fragen stellen , ich weiß ja nichtmal was ein PChar ist und mit " für PChars gibt es "StrAlloc"" kann ich erst recht nichts anfangen...
Ich wollte eigentlich nur wissen wie man Pointer anwendet, dass man ne Kette erstellt, in die man Elemente einfügen und auslesen kann und die man sortieren kann.
Die Kette unten hat aber erst zwei Eltemente (1 und 2) und ich hab keine Ahnung wie man die erweitet und ich habe nur ne leichte Ahnung wie man die sortieren könnte...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 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