Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!caip!ut-sally!seismo!umcp-cs!aplcen!jhunix!ecf_bdw From: ecf_bdw@jhunix.UUCP (Dwight Wilson) Newsgroups: net.lang.c Subject: Re: Fun with * and & Message-ID: <3080@jhunix.UUCP> Date: Thu, 26-Jun-86 15:30:49 EDT Article-I.D.: jhunix.3080 Posted: Thu Jun 26 15:30:49 1986 Date-Received: Sat, 28-Jun-86 04:17:05 EDT References: <487@cubsvax.UUCP> <1250@ncoast.UUCP> Reply-To: ecf_bdw@jhunix.ARPA (Dwight Wilson) Organization: Johns Hopkins Univ. Computing Ctr. Lines: 57 In article <1250@ncoast.UUCP> allbery@ncoast.UUCP (Brandon Allbery) writes: >Expires: > >Quoted from <487@cubsvax.UUCP> ["Re: C'mon, guys! (Really, pointer pedagogy)"], by peters@cubsvax.UUCP... >+--------------- >| Just a quick remark. When I was learning C, I understood that "*pi" meant "the >| contents of pi," but somehow had difficulty conceptualizing why the declaration >| "int *pi;" declares pi as a pointer to an int; that is, I knew it was a >| convention I had to memorize, but it didn't seem mnemonic to me. Then, about >| a month ago, revelation!: read this as "the contents of pi is an integer;" >| which implies, "pi is that which contains (or points to)" an integer. Somehow >| it made thinking about the declarations easier. It's occurred to me that maybe >| everyone else in the world sees this from day 1, but for us dumb folks, having >| this reading pointed out would probably make the learning process easier.... >+--------------- > >Easy: Use the Algol 68 method. (Snide remarks about sh and adb source to >/dev/null or /dev/bourne, please.) Translate * as ``REF''. Then they look >like: > > int *pi; -> int REF pi; > x = *pi; -> x = REF pi; > >REF is, of course, short for ``reference'', which is just another word for >``pointer''. (Note that ``x = *pi'' is really a DEREFERENCE, since you're not >merely using the ``refrence'' to the interger, but the integer itself. That's >the confusion of C. ``*'' -> ``REF'' is a way to remember it.) Well I don't really see this as very helpful, all you've done is replace the symbol '*' with the word 'REF'. Although this is more mnemonic I don't think it is more helpful conceptually. More helpful is something like this. #define pointer_to_int int * then the definition pointer_to_int pi; expands into: int * pi; (same as int *pi, the space is unimportant). The form 'int *pi' is confusing to the uninitiated since it says that *pi is an integer, so therefore pi is a pointer to an integer. the form 'pointer_to_int pi' directly states that pi is a pointer. Incidently you can use #define pointer_to(X) X * to create a general pointer_to declaration. Of course this horribly wordy on convoluted declarations. -Dwight