I do not quite understand the logic of pointer arithmetics. The example provides the expected result in both cases, but why do I have to multiply in the first version ?
const table: array [0..5] of single = (0,1,2,3,4,5);
var p: psingle;
begin
p := @table + 3 * sizeof (single); //need to multiply by size to make it work
writeln (p^);
p := psingle(@table) + 3;
writeln (p^);
end.