Why "P = &A" is used instead of "P = A"??
Because, that can only be used had A itself was a pointer. To to that, you have to declare A as
int *A;
A = malloc(13*sizeof(int))
P = A
And Two Complicated Declarations which I didnt get:-
char (*(*x())[])() :-
x is a function returning pointer to array of pointers to functions returning char
char(*(*X[3])())[5] :-
X is an array (of size 3) of pointers to function returning pointers to array of 5 characters.