My question is if arr is a const pointer
Its not a const
pointer.
Here's how you declare a const pointer.
const char constArray[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
C Standard (C99 6.3.2.1/3) says "Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue.
int b[100]; // b is an array of 100 ints.
int* p; // p is a pointer to an int.
p = b; // Assigns the address of first element of b to p.
p = &b[0]; // Exactly the same assignment as above.
p = b; // Legal -- p is not a constant.
b = p; // ILLEGAL because b is a constant, altho the correct type.
Source: http://www.fredosaurus.com/notes-cpp/arrayptr/26arraysaspointers.html