- find the variable name
- translate the operator adjacent to the var name with prioirty
- translate anthor symbol adjacent to the var in the opposite direction
- go back to step 2
- finally, deal with the class declarition such as int and so forth
// only a * on the left side adjacent to p, there is no symbol on the right side
int *p // 1
// * on the left side, [] on the right side. but [] is prior to *.
// the order is p -> p[13] -> int *(p[13])
int *p[13] // 2
// this order is constrant by ()
int *(p[13]) // 3
// p -> *p -> int * *p
int **p // 4
int (*p)[13] // 5
// () is prior to *
// f is a function which returns a pointer to int
// f -> f() -> int *(f())
int *f() // 6
// f is a pointer for the priority of *
// and then, the pointer point to function
// f -> *f -> *f() -> int (*f())
int (*f)() // 7
// f is a function which returns a pointer.
// the pointer point to a array of 13 elements.
// each element is a pointer which point to a function which return int.
int (*(*f())[13])() // 8
// x is a array of which each is a pointer.
// the pointer point to a function which return pointer
// that point to a array of int
int (*(*x[3])())[5] // 9
other refs