The expression &s
is a pointer to an object of type char[6]
which is the type of the array s
.
On the other hand the type char **
is pointer type to an object of type char *
. The types char[6]
and char *
are different types. So the pointer types are incompatible.
Your fallacy is that you think that in this expression &s
the array designator is implicitly converted to pointer to its first element. However such an assumption is wrong.
It is more explicitly expressed in the C Standard (6.3.2.1 Lvalues, arrays, and function designators) than in the C++ Standard
3 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. If the array object
has register storage class, the behavior is undefined.