![]() |
Pointerinhalt verändern
Hallo zusammen,
bin neu hier und programmiere erst seit kurzem. Ich habe ein Verständnisproblem mit Pointern und es wäre sehr nett, wenn ein paar von euch lieben Spezialisten mir helfen könnte :) Ich habe zwei Pointer deklariert: var buffer : PChar; copybuffer : PChar; Ihnen dann Speicher zugewiesen : buffer:=Pchar(AllocMem(1024)); copybuffer:=Pchar(AllocMem(1024)); Dann aus einem File in einen gelesen : FileRead(FH,buffer^,50); Nun kopiert : copybuffer^:=buffer^; Nun möchte ich ähnlich wie bei arrays copybuffer[x]:=copybuffer[x] + vari[x] vom ersten Wert bis zu einem bestimmten den Inhalt verändern, in diesem Fall die Variable vari[x] dazu addieren. Jedoch: for i:=1 to 50 do copybuffer^[i]:=copybuffer^[i]+vari[i]; funktioniert nicht ! Über ein paar Tips würde ich mich sehr freuen. Danke, Jasmine :hi: |
Re: Pointerinhalt verändern
Hi!
:hi: Herzlich willkommen in der DP! :hi: Könnte es vielleicht über
Delphi-Quellcode:
funktionieren (PChar ist ja nicht ein »Standard-Pointer«, sondern etwas anders, glaube ich... :gruebel: )
for i:=1 to 50 do copybuffer[i]:=copybuffer[i]+vari[i];
oder sonst vielleicht mit
Delphi-Quellcode:
Sind nur zwei spontane Ideen, ist aber eine gute Frage
for i:=1 to 50 do copybuffer[i]^:=copybuffer[i]^+vari[i];
LG, Delphi-Freak |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Geht wohl mehr in die Richtung von Object Pascal ;) |
Re: Pointerinhalt verändern
Delphi-Quellcode:
oder du machst:
for i := 0 to 50-1 do
pbyte(integer(copybuffer)+i)^ := pbyte(integer(copybuffer)+i)^+vari[i];
Delphi-Quellcode:
type tbla: array[0..0] of byte;
pbla: ^tbla; bla: pbla; begin bla := copybuffer; for i := 0 to 50-1 do bla[i]^ := bla[i]^+var[i]; end; |
Re: Pointerinhalt verändern
Das ging aber schnell, danke :-D
@Delphi-Freak klappt leider nicht @brechi Danke. Aber woher nehme ich pbyte ? Locale Variabel als Byte deklariert ? var pbyte : byte; Compiler gibt Fehlermeldung : Missing operator or semicolon aus ! Jasmine |
Re: Pointerinhalt verändern
pbyte dürfte eine Funktion sein, sowie z.B. die Funktion PChar(). Wahrscheinlich brauchst du dafür irgendwelche Units in den Uses - nur weiß ich auch nicht welche, ich lese diesen Fuktionsnamen (wenn es überhaupt einer ist) zum ersten Mal... Brechi kann dir da wahrscheinlich besser helfen :?
LG, ich |
Re: Pointerinhalt verändern
type pbyte = ^byte;
sollte delphi aber kennen, weils in der windows.pas steht also einfach nix deklarieren edit: pchar ist nichts anderes als nen ^char; also nen pointer auf nen char (array) gibt auch pinteger etc. kommt halt drauf an was du amchen willst aber nen + funktioniert nur auf zahlbasis d.h. du kannst nicht 2 chars addieren sondern nur 2 bytes |
Re: Pointerinhalt verändern
Bedeutet das, dass wenn man zwei Typen
Delphi-Quellcode:
hat, dass es dann automatisch die »Funktion« PMyType gibt, um einen Pointer zu erzeugen? :gruebel:
type
MyType: Array of Byte; PMyType: ^MyType; mfg [Edit]Tschuldigung, dass das jetzt etwas OT wird :oops: [/Edit] |
Re: Pointerinhalt verändern
pmytype ist dann einfach nur nen pointer, mehr nicht.
aber wenn du den veränderst mit mytype^ ändert delphi das dann jenachdem ab worauf es zeigt d.h. nen pbyte(addr)^ := 1; würde nur das byte an der addreses ändern nen pinteger(addr)^ := 1; würde 4 bytes ändern usw. wenn du nen ^array hast dann musst du noch nen index angeben |
Re: Pointerinhalt verändern
Das war IMHO nicht Delphi-Freaks Frage.
PMyType ist keine neue Funktion, sondern einfach ein Typecast, den es ja automatisch für jeden Typ gibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz