Why does `void func(int A[const 10])` make the array parameter const and not the array elements?
I wonder why
Because the C standard explicitly says so.
6.7.6.3 ¶ 7 A declaration of a parameter as "array of type" shall be adjusted to "qualified pointer to type", where the type qualifiers (if any) are those specified within the [ and ] of the array type derivation.
Note, "qualified pointer to type", not "pointer to qualified type". The latter is expressible with the ordinary syntax const int A[10]
.
This syntax was invented specifically to express "a qualified pointer to type, adjusted from an array type with an optional size provided for documentation". It is only valid in function prototypes.