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;