[This was posted to comp.lang.c by its author, David Anderson, on 1994年05月06日.]

The ``Clockwise/Spiral Rule'' (for Pointers)

By David Anderson

There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration!

There are three simple steps to follow:

  1. Starting with the unknown element, move in a spiral/clockwise direction; when ecountering the following elements replace them with the corresponding english statements:

    [X] or []
    => Array X size of... or Array undefined size of...
    (type1, type2)
    => function passing type1 and type2 returning...
    *
    => pointer(s) to...

  2. Keep doing this in a spiral/clockwise direction until all tokens have been covered.

  3. Always resolve anything in parenthesis first!

Example #1: Simple declaration

 +-------+
 | +-+ |
 | ^ | |
 char *str[10];
 ^ ^ | |
 | +---+ |
 +-----------+
Question we ask ourselves: What is str?
``str is an...

Example #2: Pointer to Function declaration

 +--------------------+
 | +---+ |
 | |+-+| |
 | |^ || |
 char *(*fp)( int, float *);
 ^ ^ ^ || |
 | | +--+| |
 | +-----+ |
 +------------------------+
Question we ask ourselves: What is fp?
``fp is a...

Example #3: The ``Ultimate''

 +-----------------------------+
 | +---+ |
 | +---+ |+-+| |
 | ^ | |^ || |
 void (*signal(int, void (*fp)(int)))(int);
 ^ ^ | ^ ^ || |
 | +------+ | +--+| |
 | +--------+ |
 +----------------------------------+

Question we ask ourselves: What is `signal'?

Notice that signal is inside parenthesis, so we must resolve this first!

The same rule is applied for const and volatile. For Example:

	const char *chptr;

How about this one:

	char * const chptr;

Finally:

	volatile char * const chptr;

Practice this rule with the examples found in K&R II on page 122.


Copyright © 1993,1994 David Anderson

This article may be freely distributed as long as the author's name and this notice are retained.


AltStyle によって変換されたページ (->オリジナル) /