These are two kinds of declaration for an array of integers:
while these are a bit different
int x; /* allocated at compile time, each position has the size of an int */
int *x; /* it's the same with the difference that the memory allocated at compile time is just for a pointer,
you will need to allocate it dinamically with malloc */
the advantage of allocate arrays dinamically is that you can manage their size at run time.
int *x /* at compile time, sizeof(int*)*10 is allocated, thus is an array of pointers to integers */
int **x; /* as above with tthe difference that the memory allocated at compile time is just for a pointer
you will need to allocate it dinamically */
hope that help.