Fun with * and &

Andrew Koenig ark at alice.UucP
Tue Jun 24 05:20:16 AEST 1986


> 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.)

But that's not how Algol 68 works.  Instead, you write:

		REF INT pi;

which says that pi is bound to a reference to a reference to an
integer (less formally, a variable of type REF INT).  You can
also say:

		INT x;

which defines x as an integer variable (formally a REF INT), and then:

		x := pi;

which implicitly dereferences pi, or

		x := INT (pi);

which explicitly dereferences it.

The easy way to remember how C pointer declarations work is that

		int x;

says that x is an int, and

		int *x;

says that *x is an int, so x is a pointer to int.



More information about the Comp.unix mailing list