> I always thought [] was just syntactic sugar over a regular pointer, but seems like I was wrong.
For another example showing their differences, if a.c has:
int n[] = { 1 };
And b.c has: extern int *n;
printf("%d\n", *n);
Then running b.c will segfault, whereas if it said extern int n[], it would work as expected (hint: extern int n and printf("%d\n", n) would also work). Arrays degrade to pointers at the drop of a hat, but they're distinct from them.