Fun with * and &

Dwight Wilson ecf_bdw at jhunix.UUCP
Fri Jun 27 05:30:49 AEST 1986


In article <1250 at ncoast.UUCP> allbery at ncoast.UUCP (Brandon Allbery) writes:
>Expires:
>
>Quoted from <487 at cubsvax.UUCP> ["Re: C'mon, guys! (Really, pointer pedagogy)"], by peters at 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



More information about the Comp.lang.c mailing list