Since pointers are variables themselves, they can be stored in
arrays just as other variables can.This is just one aspect of
the generality of C's data types, which we'll be seeing in the
next few sections. We've used a recursive definition of
``expression'': a constant or variable is an expression, an
expression in parentheses is an expression, an expression plus
an expression is an expression, etc. There are obviously an
infinite number of expressions, of arbitrary complexity. In
exactly the same way, there are an infinite number of data types
in C. We've already seen the basic data types: int, char,
double, etc. But then we have the derived data types such as
array-of-char and pointer-to-int and function-returning-double.
So we can say that for any type, array-of-type is another type,
and pointer-to-type is another type, and function-returning-type
is another type. Once we've said that, we can see that there is
also the possibility of arrays of pointers, and arrays of
arrays, and functions returning pointe