From: Alexey Dobriyan
> Sent: 14 December 2016 13:20
...
> > If you have foo->bar[id - const] then the compiler has to add the
> > offset of 'bar' and subtract for 'const'.
> > If the numbers match no add or subtract is needed.
> >
> > It is much cleaner to do this by explicitly removing the offset on the
> > accesses than using a union.
>
> Surprisingly, the trick only works if array index is cast to "unsigned long"
> before subtracting.
>
> Code becomes
>
> ...
> ptr = ng->ptr[(unsigned long)id - 3];
> ...
The compiler may also be able to optimise it away if 'id' is 'int'
rather than 'unsigned int'.
Oh, if you need casts like that use an accessor function.
David