AGB  ·  Datenschutz  ·  Impressum  







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

[basics] pointer

Ein Thema von Skyruner2 · begonnen am 4. Jun 2004 · letzter Beitrag vom 4. Jun 2004
Antwort Antwort
Skyruner2

Registriert seit: 26. Okt 2003
93 Beiträge
 
Delphi 7 Professional
 
#1

[basics] pointer

  Alt 4. Jun 2004, 22:02
ich höre es so oft, und jetzt will ne Funktion meiner TADOQUery auch noch einen haben.. ,
aber um ehrlich zu sein, ich hab keine wirkliche Idee was so ein Pointer is.

hatten wir noch nicht in info, und bis jetzt brauchte ich noch nie einen

könnte mich bitte jemand aufklären: was ist ein Pointer, warum sind sie so besonders, und wie benutze ich sie?

edit:
hab nen bissel wat online gelesen, aber leider ist die Delphi hilfe datei für die TADO komponenten kaput. kann mir einer was sagen zu TADOQuery.GetFieldData(FieldNo:integer,Buffer:poin ter)?


edit2:
Delphi-Quellcode:
Type adothing=^integer;
var lastrecord:adothing;
Adoquery_news.GetFieldData(0,lastrecord);
das geht, aber wie kann ich jetzt lastrecord in eienen string verwandeln? (fieldNo 0 is ein integer, daher Type adothing=^integer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [basics] pointer

  Alt 4. Jun 2004, 23:52
Moin Skyruner,

Pointer von to point = zeigen
Es ist also ein Zeiger (auf einen Speicherbereich).

Das heisst nichts anderes, als er die Adresse einer Speicherstelle enthält.
Wie diese jetzt zu interpretieren ist, hängt vom Zusammenhang ab.

In Deinem Falle ist adothing als Pointer auf ein integer deklariert (üblicher wäre Padothing. Präfix P für Pointer).
Ein integer ist ein 32 Bit Wert mit Vorzeichen, somit sieht der Compiler den Wert, der an die Adresse die adothing enthält als integer Wert an.

Auslesen kannst Du den Wert dann durch das sogenannte Dereferenzieren mit ^

Das sähe dann z.B. so aus:

ShowMessage(IntToStr(lastrecord^)); durch das ^ wird dem Compiler gesagt, dass der Wert auf den lastrecord zeigt ausgelesen werden soll. Da es ein Pointer auf einen Integer ist, funktioniert das auch problemlos.

Damit das Füllen überhaupt funktioniert, müsste allerdings zu Anfang einmal Speicher reserviert werden, z.B. so:

lastrecord := AllocMem(4); jetzt enthält lastrecord die Adresse eines vier Byte grossen, mit 0 initialisierten Speicherbereiches, so dass die Funktion einen Integerwert an dieser Adresse ablegen kann.

Zitat von Skyruner2:
warum sind sie so besonders, und wie benutze ich sie?
Besonders...?
Da versteh' ich jetzt nicht, was Du meinst.
In Delphi sind sie oft besonders, weil die sogenannte Compilermagic vieles vor dem Entwickler verbirgt, bzw. automatisch erledigt, worum man sich sonst selber kümmern müsste.
Beispielsweise enthalten Variablen von Objekten (z.B. Form1) auch nur Pointer. Dank des Compilers muss man bei diesen aber nicht selber dereferenzieren.

Was vielleicht noch erwähnenswert ist:
Wird ein typisierter Pointer (also auf einen bestimmten Datentyp, wie in Deinem Beispiel) mittels inc erhöht, so wird er automatisch um die Grösse (sizeof) des Typs erhöht.
Es ist ein "beliebter" Fehler, hier selber die Grösse anzugeben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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:02 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