Q:  How do I do pointer arithmetic in Delphi?

A:  If you are doing dynamic memory allocation, it is done like this:

uses WinCRT;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArray: array[0..30] of char;
  b: ^char;
  i: integer;
begin
  StrCopy(MyArray, 'Lloyd is the greatest!!!');
  b := @MyArray;
  for i := StrLen(MyArray) downto 0 do
  begin
    write(b^);
    inc(b);
  end;
end;

The amount by which the pointer is incremented is the correct size.  (i.e.  It is the size of the object pointed to.)  The following code proves that.

var
  P1, P2 : ^LongInt;
  L : LongInt;
begin
  P1 := @L;
  P2 := @L;
  Inc(P2);
  L := Ofs(P2^) - Ofs(P1^); {L = 4; sizeof(longInt)}
end;