There is no any "constant array pointer"
In this statement
char a[]="abcde";
there is declared a non-const array. You may change it for example as
a[0] = 'A';
When you pass the array to the function as an argument then there is used conversion from the array to a pointer of type char *
that points to the first element of the array.
This function declaration
void fun(char a[]);
is equivalent to
void fun(char *a);
The parameter is adjaced to the pointer.
So inside the function you can to change the pointer itself and the object it points to. For example
a++;
*a = 'B';
If you want that the pointer would not be changed in the function you could declare it as
void fun(char * const a);
In this case the compiler would issue an error for statement
a++;
because a is indeed a const pointer.