
On Wed, Oct 05, 2005 at 11:45:27AM +0100, Neil Mitchell wrote:
I believe that in C the two are completely equivalent. (Is that not so in VC++?) I just have a prejudice that &arr[n] should be used when one means a pointer to a single element, and arr+n when one wants a pointer to the array from that position (even though in C they're the same thing).
As far as I was aware, if they operate on char*, they are equivalent, since sizeof(char) = 1. However, if the code is ever switched to using unicode characters, which makes it a short*, then b = &b[5] is equivalent to b += 5 * sizeof(short), which is b += 10. For the moment they are the same, but since unicode support is a distinct possibility in the future its best to keep it as easy as we can.
In C, p[n] is defined as *(p+n) (see [1] 6.5.2.1), with addition of pointers and integers defined as advancing the pointer by n array elements (6.5.6). So (p = &p[5]) === (p = &*(p+5)) === (p = p+5) === (p += 5) whatever the value of sizeof(*p). [1] ISO/IEC 9899:1999 http://www.nirvani.net/docs/ansi_c.pdf, but this part was there from the beginning.