Read it backwards (as driven by Clockwise/Spiral Rule):
int*
– pointer to intint const *
– pointer to const intint * const
– const pointer to intint const * const
– const pointer to const int
Now the first const
can be on either side of the type so:
const int *
==int const *
const int * const
==int const * const
If you want to go really crazy you can do things like this:
int **
– pointer to pointer to intint ** const
– a const pointer to a pointer to an intint * const *
– a pointer to a const pointer to an intint const **
– a pointer to a pointer to a const intint * const * const
– a const pointer to a const pointer to an int