Re: cvs commit: hugs98/src errors.c script.c hugs98/src/winhugs General.c IORemap.c Winhugs.h

Ross Paterson <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.hugs
Message-ID <[email protected]>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.