allbery@ncoast.UUCP (Brandon Allbery) (06/23/86)
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.) --Brandon -- ihnp4!sun!cwruecmp!ncoast!allbery ncoast!allbery@Case.CSNET ncoast!tdi2!brandon (ncoast!tdi2!root for business) 6615 Center St. #A1-105, Mentor, OH 44060-4101 Phone: +01 216 974 9210 CIS 74106,1032 MCI MAIL BALLBERY (part-time)
ark@alice.UucP (Andrew Koenig) (06/23/86)
> 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.