AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Pointer : Eine Speicherstelle weiterrücken
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer : Eine Speicherstelle weiterrücken

Ein Thema von braingrenade · begonnen am 12. Mär 2004 · letzter Beitrag vom 13. Mär 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von atreju2oo0
atreju2oo0

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 13. Mär 2004, 08:19
Source:
inc(PByte(pinput));

Dann ist also festgelegt, dass der Compiler jeden Pointer hintereinander speichert?
Was ist wenn zum Beispiel Pointer1 an einer anderen Stelle gespeichert wird als Pointer2?
Dann geht der inc Algorithmus doch nicht mehr, oder?
Wäre nett wenn mich mal jemand aufklärt... Ist ja doch nen bissle kürzer als meine Variante...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 13. Mär 2004, 09:33
sollte auch so gehen
Integer(pInput) := Integer(Pinput) + 1;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 13. Mär 2004, 10:52
Moin atreju,

es wird nicht jeder Pointer hintereinander gespeichert, sondern es geht darum wie man an Daten herankommt, die im Speicher unmittelbar hintereinander liegen.
Dann benötigt man nur die Adresse des ersten Byte, und kann dann, durch ein einfaches Inc auf das nächste Element kommen.
Da die Variable pinput ein untypisierter Pointer ist, "weiss" der Compiler nicht, wie der den Inc Befehl umsetzen soll, da die Compiler Magic auf Grund des Typs des Pointers weiss, um wieviel der Wert erhöht werden muss.
In dem Beispiel handelt es sich um eine Pointer auf einzelne Bytes, und der Typecast mit PByte(...) dient nur dazu dem Compiler mitzuteilen, dass er den Wert der Variablen um 1 hochzählen soll.
Hätte man geschrieben

inc(PDWORD(pinput)); würde pinput um 4 erhöht werden, da ein DWORD eben 4 Byte belegt.

Das funktioniert dann genauso mit Pointern auf beliebige Datenstrukturen.
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
Seite 2 von 2     12   


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