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 1 von 2  1 2      
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#1

Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 20:19
Moin Leute !


Hab ein Problem mit den allseits beliebten Pointern :

Wie kann ich einen die in einem Pointer P gespeicherte adresse
um eine Speicherstelle weiterbewegen?

In der OH steht dazu :

Code:
If I is an integer and P is a character pointer, then P + I adds I to the address given by P; that is, it returns a pointer to the address I characters after P. (The expression I + P is equivalent to P + I.) P ? I subtracts I from the address given by P; that is, it returns a pointer to the address I characters before P.
Nun hab ich folgenden Code :

Delphi-Quellcode:
var Pinput : Pointer;
begin
pinput := Pinput + 1;
Geht aber nicht : [Error] INN.pas(73): Operator not applicable to this operand type

ich habs auch noch so probiert :

 pinput := byte(Pinput) + 1; was aber auch nicht zum gewünschten Ergebniss führt : [Error] INN.pas(73): Incompatible types: 'Integer' and 'Pointer'

Weiß jemand wie ich das Lösen könnte ?
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 20:44
Versuch es mal mit Inc. Als zweiten Parameter kannst die Schrittweite angeben, also sizeof(Integer).
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 20:50
hmmm ...

funtioniert leider auch nicht :

Delphi-Quellcode:
 inc(pinput,sizeof(byte)); //[Error] INN.pas(74): Ordinal type required

 inc(pinput); //[Error] INN.pas(74): Ordinal type required
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 20:57
Problem gelöst !!

Delphi-Quellcode:
var pinput : pointer;
    P : Pbyte;
begin
    P := pinput;
    inc(P);
end;
Dankescheeen !
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:09
Also das was Du brauchst ist eine Liste

Code:
type
      PListe : ^TListe;
      TListe = record
      wert : integer // beliebige Variablen;
      next : PListe; // zeigt auf das nächste Element

var Anker,help:PListe; // Anker speichert das ERSTE Element und wird NIE verändert; help durchläuft die Liste
Im OnCreate musst Du nun noch die Zeiger initialisieren
Code:

new(Anker);// Reserviert Speicher für die Variable
An irgendeiner Stelle musst Du die Werte einlesen; Das geht so:
Code:
 help:=anker; // Setzt die Hilfsvariable auf die Erste Stelle

repeat
 new(help.next); // Erzeugt eine neue Variable und speichert den Zeiger dieser Variable in help.next ab
 help:=help.next; // Jetzt rutscht man mit help in der Liste eins hoch
 help.wert:=2    // Hier kannst Du Daten ändern
 Help.next:=nil; // und setzt den neuen Nachfolger, der ja noch nicht erzeugt wurde auf 0 
until fertig...
und mit der Struktur kannst Du dann ganz locker eins hoch rutschen indem du
Code:
 help:=help.next
benutzt...

Am Ende des Programms musst Du den Speicher noch freigeben
indem Du diese Procedure mit clearanker(Anker) aufrufst
Code:
  procedure clearanker(help: PListe);
    begin
      if help.next<>nil then clearanker(help.next);
      dispose(help);
    end;
Ich hoffe das löst dein Problem...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:11
oder so...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#7

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:20
Nee , Listen mag ich net so , aber troztdem danke für die Mühe !
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#8

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:22
Liegt, wenn ich mich nicht irre, daran, dass der Pointer typisiert sein muss. Es wird immer um soviel byte weitergerückt, wie eine Speichereinheit des referenzierten Typs belegt. Inc(p) bewirkt also zB das "vorrücken" um vier byte falls p ein PInteger ist.

Gruß, Sebastian
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:35
Moin Braingrenade,

es ginge auch

inc(PByte(pinput));
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
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#10

Re: Pointer : Eine Speicherstelle weiterrücken

  Alt 12. Mär 2004, 21:41
Ahh , das ja noch praktischer !
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:42 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