Ran some tests:
typedef int X[10];
#define typeinfo(t) _Generic((t), \
X: "int X[10]", \
int: "int", \
int *: "int *", \
const int *: "const int *", \
default: "not" \
)
int main(void) {
const int a[10];
const X b;
printf("%zu\n", sizeof (const int *));
puts(typeinfo(a));
puts(typeinfo(b));
printf("%zu\n", sizeof a);
printf("%zu\n", sizeof b);
puts(typeinfo(a[0]));
puts(typeinfo(b[0]));
printf("%zu\n", sizeof a[0]);
printf("%zu\n", sizeof b[0]);
}
Output
4
const int *
const int *
40
40
int
int
4
4
Both have the same size and both convert to the same type when passed as an argument. Neither is a pointer. Both are arrays.
By code analysis and testing - they are the same type.