Simple c question - pointer to array

ed gokhman esg at mtx5a.UUCP
Sat May 31 07:29:00 AEST 1986


> Ok if i have a struct which is named in a typedef as T, I 
> know how to get an array of pointers to T:   T *a[20];
> what I want is a pointer to an array of T's.

Kurt,

All you need is to express the declaration in English
and then to convert it token by token. If precedence
of the i-th token is higher then (i-1)-th the result
of translation of first i-1 tokens must be parenthesized.

In order of decreasing precedence "valid" English tokens
and their C-conversions are (S stands for the string resulting
from the previous step in English-C conversion (possibly,
parenthesised)):

English					C
--------------------------------------------------
<name> is                               <name>

function returning                      S ()

array of  N                             S [ N ]

pointer to                              *S
===================================================

For example,

English                                 C
--------------------------------------------------
X is a pointer to an array of 20 Ts	...

a pointer to an array of 20 Ts          X

an array of 20 Ts                       *X

	> precedence of [] is higher then *, so
	>*X should be parenthesizied.

an array of 20 Ts                         (*X)

Ts                                      (*X)[]

...                                     T  (*X)[]
===================================================

Similarly,
 "X is a pointer to an array of 10 pointers
to functions returning pointers to arrays of 11 int"

would be    int (*(*(*X)[10])())[11]



More information about the Comp.lang.c mailing list