From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,df854b5838c3e14 X-Google-Attributes: gid109fba,public X-Google-Thread: 1014db,df854b5838c3e14 X-Google-Attributes: gid1014db,public X-Google-Thread: 103376,df854b5838c3e14 X-Google-Attributes: gid103376,public X-Google-Thread: 10db24,fec75f150a0d78f5 X-Google-Attributes: gid10db24,public From: tsw@3do.com (Tom Watson) Subject: Re: ANSI C and POSIX (was Re: C/C++ knocks the crap out of Ada) Date: 1996/04/10 Message-ID: #1/1 X-Deja-AN: 146836819 distribution: world references: <4kb2j8$an0@solutions.solon.com> <4kbrt5$k3h@mulga.cs.mu.OZ.AU> <4kcpgkINNcku@keats.ugrad.cs.ubc.ca> <4kgunm$o4o@gde.GDEsystems.COM> organization: The 3DO Corporation newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++,comp.edu Date: 1996-04-10T00:00:00+00:00 List-Id: In article <4kgunm$o4o@gde.GDEsystems.COM>, Chet wrote: > If i = j depends on your unit of address. If i is assumed a longword then > > &i + 4 = &j is true > not > &i + 1 = &j > > Chet Bzzzzzt. Sorry wrong answer, and thank you for playing the game. Adding '1' to a pointer implies that you increment the address by the sizeof the object pointed to. Why else is a[i] =(equivalent to)= *(a+i). Now in the original example (deleted before this response) the second object 'j' in this case could be optimized into a register, if its address weren't taken somewhere. All of this can explain why one can't do arithmetic on a 'void *' unless the compiler has made special (non-ANSI) arrangements. Typically sizeof(void) is defined in the compiler as zero so this can't be done (and it produces an error!). -- Tom Watson tsw@3do.com (Home: tsw@johana.com)