Question is, what's the point of that syntax if it's just converted to a standard pointer at the function boundary?
In this case, because you're passing the array as an argument C has created a pointer to a given address - however, the really interesting case is what happens when you allocate an array on the stack, and only use it there.
When you do this, the compiler then converts load statements for that array not into a pointer plus offset, but direct access to stack base + offset - since why not? It doesn't make sense to store the pointer anyway.
However, when it comes to passing that array around, the compiler passes the address of the base of the array to the function - as a pointer.
In short, []
helps you do pointer arithmetic more nicely. In the case of declaring arrays, it can be optimised away - which is why arrays are not pointers, although they are accessed via pointers in certain circumstances (and not in others).