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.lang.c
mailing list