is there a way to convert from pointer array to array

I tried the following, but it doesn't work.

int* p;
a=(*P);// doesn't work

Your question is not in clear English, but I think you mean "Is there a way to convert an array to a pointer, or a pointer to an array".

An array is a pointer (to the zero-th element), so there's no way to convert. Just use it as is. Your code is confused because you use P and p as if they were the same (they are not) and you overwrite a twice.

If you have a pointer to array, you can use it as an array...

int main()
        int a[]={1,2,3};
        int* p=a;
        int val=p[0];

An array is a pointer (to the zero-th element)

No, an array is not a pointer. An array name when used in value context will be converted to a pointer to the first element, but this conversion does not take place in an object context. You can verify that this is the case by using an array and a pointer in object context and checking the result:

#include <iostream>

int main()
    int a[] = {1,2,3,4,5};
    int *p = a;

    std::cout<< sizeof a <<'\n'<< sizeof p <<'\n';

If the array were really a pointer, sizeof would evaluate to the size of a pointer, not the total byte size of the array.

C++98 Standard Section 4.2 "Array-to-pointer conversion", paragraph 1:

An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to an rvalue of type “pointer to T.” The result is a pointer to the first element of the array.

As Narue said, arrays and pointers are not the same, however, the standard defines an implicit conversion from an array to an _rvalue_ pointer. An rvalue means that the variable cannot be assigned a value (i.e. it's "read-only", as in, it is usually on the right-side of an assignment, but cannot appear on the left-side (that requires an lvalue)). This is why you cannot, as in your example, do a = p; or something like that, because it would require a conversion of the array "a" into an lvalue pointer, which is not allowed, for obvious reasons.