Meaning of the following C declarations

I am unable to understand the following declaration can somebody please help me with this. It is bit confusing and I can't find any proper explanation for this expression plus I have never seen such type of declaration before in my practice.

char (*(*x())[])();
char (*x)(); // A pointer to a function returning char with any args.
char (*x[])(); // An array of such pointers.
char (*(*x)[])(); // A pointer to such array.
char (*(*x())[])(); // A function returning such pointer: A function returning a pointer to
// an array of pointer to function returning char with any args.
char(*(*x[3])())[5];
char(*x)(); // A pointer to a function returning char with any args.
char(*x)()[5]; // A pointer to a function returning an array of 5 chars (any args).
char((*x)())[5]; // Same as above.
char(*(*x)())[5]; // A pointer to a function returning a pointer to an array of 5 chars.
char(*(*x[3])())[5]; // An array of 3 of these pointers.
void (*b(int, void (*f)(int)))(int);
X b(int, void(*f)(int)); // A function returning X and taking an int and a pointer to
// a function f taking an int and returning nothing.
void (*b())(int); // A function taking nothing and returning a pointer to a function
// taking and int and returning nothing.
void (*b(int, void (*f)(int)))(int); // Combination of the two above, a function taking and
// an int and a pointer to a function f and returning
// a pointer to a function.
void(*ptr)(int(*)[2], int(*)(void)); // This one is easier:
void(*ptr)(); // A pointer to a function with no args and returning nothing.
void(*ptr)(int(*)[2], int(*)(void)); // A pointer to a function returning nothing and taking:
// - A pointer to an array of 2 int
// - A pointer to a function returning int with no args.