lets take it to the peak:

[pascal]
var
a: array of integer;
i: integer;
begin
setlength(a, 20);
for i := a[0] to a[19] do doSomething(i);
end.
[/pascal]

... we calculate 1 offset only.
Ok. Now tried it ... doesn't work, sadly

Yes, we are indeed saying the same. The main thing I want to state
is that a[i] and (a+i)^ is the same.
Of course calculating 20 offsets is slower than calculating 1 and
then increment the pointer.