Pointer to an array of 10 int elements - int (*ptr)[10] which is certainly not int**. hence type mismatch. When x is used as an operand to & the x doesn't decay into pointer (int*). The address of the array object is int(*)[10] not int**.
It is a practice with application of its own. int *x = malloc(..) is quite different from int x[10] with respect to lifetime, storage duration and its usage that changes based on that.
Arrays are not pointers - on most situations it is converted into one (array decaying) - but that doesn't make it a pointer. For example when array is used as operand of &,sizeof operator it doesn't decay into pointer.
The standard C11 N1570 says about this array decaying, as it is a core idea used in this question itself and it's answer will mention it. From §6.3.2.1¶3
Except when it is the operand of the sizeof operator, the _Alignof 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. If the array object has register storage class, the behavior is undefined.