Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer addieren (https://www.delphipraxis.net/148724-pointer-addieren.html)

ATS3788 7. Mär 2010 08:21


Pointer addieren
 
Code:
char      *lpZero      = NIL;
Int    nOut = (lpZero - lpszBuffer) + 1;

char       lpszBuffer[1024]   = {'\0',};

Hi kann man in Pascal/Delphi über Umwegen, wie in C++ Zeiger addieren oder subtrahieren,
habe nichts im Web gefunden

alzaimar 7. Mär 2010 08:29

Re: Pointer addieren
 
Delphi-Quellcode:
Var
  MyPointer : Pointer;
  MyCharPointer : ^Char;
  MyIntPointer : ^Integer;
Begin
  MyPointer := Pointer (Integer (MyPointer) + 1);
  Inc (MyCharPointer); // Zeigt auf nächstes Element ( = +1)
  Inc (MyIntPointer); // Zeigt auf nächstes Element ( = +4)

himitsu 7. Mär 2010 08:46

Re: Pointer addieren
 
Zitat:

Delphi-Quellcode:
MyPointer := Pointer (Integer (MyPointer) + 1);

Delphi-Quellcode:
MyPointer := PAnsiChar(MyPointer) + 1;
PAnsiChar hat 1-Byte große Elemente und verfügt über die nötige Pointer-Arithmetik.

jbg 7. Mär 2010 09:18

Re: Pointer addieren
 
Zitat:

Zitat von himitsu
PAnsiChar hat 1-Byte große Elemente und verfügt über die nötige Pointer-Arithmetik.

Und PAnsiChar wird auch noch in einem zukünftigen 64-Bit Delphi richtig rechnen, wohingegen "Integer(ptr)" die oberen 32-Bit des 64-Bit ausblendet und somit einen defekten Zeiger generieren wird, da laut Embarcadero Integer 32 Bit bleiben wird, wie auch in Visual C++.

SirThornberry 7. Mär 2010 10:00

Re: Pointer addieren
 
Dann würde ich aber die Schuld ganz klar an die Compilerbauer weiter geben welche in der Hilfe immer schön erwähnten das Integer und Cardinal immer schön mitwachsen.
Aber was lernen wir daraus. Sich dafür einen eigenen Typen definieren und dabei den möglichst größten zur Verfügung stehenden Typen nutzen und dann braucht man nur die eigene Typdeclaration ändern.

ATS3788 7. Mär 2010 10:38

Re: Pointer addieren
 
Danke Leute Danke für die schnelle Antwort :roteyes:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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