AGB  ·  Datenschutz  ·  Impressum  







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

Zeigerarithmetik

Ein Thema von Viktorii · begonnen am 2. Jun 2008 · letzter Beitrag vom 2. Jun 2008
Antwort Antwort
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Zeigerarithmetik

  Alt 2. Jun 2008, 08:14
Hallo,

ich möchte bei einem Pointer gerne einen Offset hinzuaddieren, bekomme es aber nicht hin. So habe ich es versucht:

pDataWithOffSet := pData + (i * $10000); Kommt leider die Fehlermeldung:

Zitat:
[Pascal Fehler] xyz.pas(340): E2015 Operator ist auf diesen Operandentyp nicht anwendbar



Wie mache ich es richtig?

Vielen Dank
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 08:24
Benutze Increment. Beachte aber, dass die Funktion um die Größe des Pointer (bei typisierten Pointer) erhöht!

Ich gehe in deinem Beispiel mal davon aus, dass pDataWithOffset ein PByte oder PChar ist, also ein Pointer auf ein Byte.

Delphi-Quellcode:
pDataWithOffSet := pData;
Inc(pDataWithOffset, i * $10000);
Wenn nicht, dann einfach den Wert einfach durch die Grösse deines Datentyps teilen. Also so:

Delphi-Quellcode:
pDataWithOffSet := pData;
Inc(pDataWithOffset, (i * $10000) div sizeof(pDataWithOffset^));
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 09:11
ich caste den Pointer einfach immer zu einem Cardinal denn ein Pointer ist ja nichts anderes als eine ausschließlich positive Speicheradresse.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 10:05
Zitat von SirThornberry:
ich caste den Pointer einfach immer zu einem Cardinal denn ein Pointer ist ja nichts anderes als eine ausschließlich positive Speicheradresse.
Da Casts auch immer Sicherheitsmechanismen ausser Kraft setzen, versuche ich immer den "offiziellen" Weg zu gehen. Ansonsten ist dieser Weg natürlich auch möglich.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 10:08
wohl war, die Sicherheitsmechanismen werden da außer kraft gesetzt - Aber das ist ja bei Pointerarthmetik sowieso der Fall wenn man diesen dann irgendwo hin zeigen lässt wo eigentlich nix mehr ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.289 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 12:17
bei PChar, PAnsiChar und PWideChar kann man sowas machen.

pDataWithOffSet := PAnsiChar(pData) + (i * $10000); allerdigns wird da immer in Einheitengröße addiert

PWideChar(P) + 9 = Cardinal(P) + (2 * 9) .. da SizeOf(WideChar) = 2

also in Bezug auf Delphi 2008 PChar besser nicht verwenden (wegen Standardunterstüzung von Unicode ... PChar = PWideChar)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 17:04
In Delphi 2008 soll übrigens ein Compilerschalter kommen, der Zeigerarithmetik erlaubt. Das stand in irgendeinem Codegear-Blog - dort hieß es übrigens auch, dass es ursprünglich ein Bug war, dass Inc für Zeiger funktioniert, dieser "Bug" dann aber aufgrund des Aufschreis der Beta-Tester nicht gefixt wurde.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Zeigerarithmetik

  Alt 2. Jun 2008, 20:56
Zitat von Apollonius:
...dort hieß es übrigens auch, dass es ursprünglich ein Bug war, dass Inc für Zeiger
funktioniert, dieser "Bug" dann aber Aufgrund des Aufschreis der Beta-Tester nicht gefixt wurde.
Naja, sie haben es nachher auch so dokumentiert und z.T. selber so genutzt.
  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 16:21 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