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 2 von 4     12 34      
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Einführung in Pointer

  Alt 7. Apr 2005, 15:48
Zitat von OH:
Ein PChar ist ein Zeiger auf einen nullterminierten String mit Zeichen des Typs Char. Jeder der drei Zeichentypen besitzt einen integrierten Zeigertyp:

PChar ist ein Zeiger auf einen nullterminierten String mit 8-Bit-Zeichen.
PAnsiChar ist ein Zeiger auf einen nullterminierten String mit 8-Bit-Zeichen.
PWideChar ist ein Zeiger auf einen nullterminierten String mit 16-Bit-Zeichen.

PChars bilden mit kurzen Strings den ursprünglichen String-Typ von Object Pascal. Sie wurden als Kompatibilitätstyp zur Sprache C und zur Windows-API eingeführt.
Das erklärt den PChar doch ziemlich gut.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
El Cattivo

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

Re: Einführung in Pointer

  Alt 7. Apr 2005, 16:13
Ja, ok... Aber darum gings mit jetzt eigentlich nicht haupsächlich.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Einführung in Pointer

  Alt 7. Apr 2005, 16:14
was genau hast du denn jetzt noch nicht verstanden? also welchen Operator(@ ^ ...) oder welche funktion (new, dispose...)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#14

Re: Einführung in Pointer

  Alt 7. Apr 2005, 16:17
Ich glaube er versteht nicht, wo und wann man pointer (verkettete listen hier ausgenommen) benutzen sollte bzw wann das von Vorteil ist. Ich verstehs naemlich auch nicht, ich bin immer ohne ausgekommen.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#15

Re: Einführung in Pointer

  Alt 7. Apr 2005, 16:32
Mal als Beispiel:

Du willst Kundendaten speichern, und weißt nicht genau wieviele das werden.
Ein super Fall um Listen zu erklären

Als erstes mal muss man den Typ deklarieren:

Delphi-Quellcode:
PMyDaten=^TMyDaten;
TMyDaten=record
  name:string;
  alter:integer;
  .
  .
  .
  next:PMyDaten;
 end;
Als nächstes braucht man den Anker/Wurzel.
Dieser wird beim Start des Progs einmal erstellt und danach NIE mehr angerühert, ausser beim beenden!

Delphi-Quellcode:
var MyDaten:PMyDaten;


new(MyDaten);
MyDaten.next:=nil;
Damit haste alles schonmal gut vorbereitet um die Liste nun zu füllen...
Wir stellen uns einfach mal vor wir haben ein Formular, wo die Daten in edits und so richtig eingegeben
wurden. Dann ist unten noch nen Knopf "Daten hinzufügen"

Delphi-Quellcode:
procedure Datenhinzufügen;
var help:PMyDaten // den Pointer nehmen wir um uns durch die Liste zu hangeln
begin
help:=MyDaten; // jetzt zeigen help und mydaten auf den selben Speicherbereich.
while help.next<>nil do //um zum letzten Element der Liste zu kommen gehen wir solange eins weiter bis das nachfolgende NIL ist.
  help:=help.next

// Jetzt haben wir mit help also einen Pointer der auf den Speicherpplatz des letzten Elements der Liste zeigt.
// Jetzt können wir das neue Element anhängen

new(help.next) // New stellt Speicherbereich für ein neues Element her und help.next zeigt automatisch auf dieses.
// Jetzt müssen wir noch auf das neue Element draufzeigen, da wir ja noch beim vorletzten hängen
help:=help.next;
// Na jetzt kommt nur noch Schreibarbeit: Werte eintragen und next auf nil setzten

help.Name:=Ich;
help....
help.next:=nil;

end;

// Das wars dann auch schon!
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Einführung in Pointer

  Alt 7. Apr 2005, 16:39
Beispiel für Pointer.
Du hast eine Musiksoftware und möchtest natürlich zu jedem Lied das ID3-Tag anzeigen.
Jetzt wäre es speicherverschwendung wenn du 10 Listen hast in denen jeweils ein paar Lieder gleich sind das du in all diesen Listen das ID3Tag speicherst. Lösung ist das man eine Große Liste im Speicher hat wo alle Informationen zu der Datei gespeichert werden und die Playlisten sind dann nur noch Listen mit Pointer welche auf die Informationen zeigen (Bild zu diesem beispiel im Anhang, die Zahlen 1 bis 14 stellen dabei die Pointer(adressen) dar)
Miniaturansicht angehängter Grafiken
beispiel_106.jpg  
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
 
#17

Re: Einführung in Pointer

  Alt 7. Apr 2005, 17:28
Ok, danke! Ich habt mir sehr geholfen. Mein Denkfehler war glaub ich, dass ich dachte jeder gespeicherte Wert bräuchte einen eigenen Pointer um die einzelenen Werte aufrufen zu können. Aber man lässt dann wohl in dem Bsp. von atreju2oo0 die zwei Zeiger durchhangeln und an der Stelle stoppen wo der Wert auf den gezeigt wird ein bestimmter ist. Ich dachte durch den Befehl "help:=help.next;" würde die ehemals in help gespeicherte Information zur Speicherleiche werden. Das erstellen einer solchen Kette könnte man ja so darstellen:
http://mitglied.lycos.de/ovittacel/l...sachen/bla.JPG
Hier beim zweiten Element sind noch für alle Elemente Adressen vorhanden. Aber MyDaten zeigt doch immer auf das erste Element und help und help^.next gehen immer weiter. Wie kann man dann (wenn man jetzt nur die Namen der Kunden speichert) bei dem fünfen, oder sechsten Element angekommen, wieder auf den ersten help^.name zugreifen? einfach durch
Delphi-Quellcode:
help:=MyDaten;
while help.next<>help^.name do
help:=help.next
Ist dann das erste help das gleiche wie beim erstellen der Kette? Wenn das so wäre, dann hätte ichs endlich verstanden
Und das Pointer Speicherplatz spaaren hab ich jetzt auch begriffen .
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Einführung in Pointer

  Alt 8. Apr 2005, 15:38
*räusper*

da ich auf luckies seite nichts zu pointern gefunden habe, frag ich hier:

Delphi-Quellcode:
//globale vars
var currentbox:^TListBox;

procedure TForm1.LBbeforeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
currentbox:=@sender;

end;

procedure TForm1.deleteClick(Sender: TObject);
begin
currentbox^.DeleteSelected;
end;
wieso wirft mir das ne AV??
Lukas Erlacher
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#19

Re: Einführung in Pointer

  Alt 8. Apr 2005, 15:57
Weil du "currentbox" keinen Speicher zugewiesen hast (New())
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Einführung in Pointer

  Alt 8. Apr 2005, 16:20
oh * mein * gott * so * ein * dummer * anfängerfehler *

(sich bei jedem stern das geräusch vorstellen, das ein auf eine hölzerne tischplatte aufprallender kopf erzeugt)

EDIT: es geht immer noch nicht.... ich rufe new(currentbox) im formcreate und im mousemove( wo der pointer ne adresse bekommt, siehe oben) auf.

EDIT2: prinzipiell müsste das aber funktinieren, oder? ich missverstehe da nicht die funktion von pointern?!
Lukas Erlacher
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 04:17 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