>>105601405>An array is compiled to a pointer to a memory addressIn C. (Also, in C, pointers and arrays aren't the same thing). That's also why all arrays must be zero-indexed in C: there's no way to specify a custom range of indices, because all you have is a pointer to the first element of the array, and you can only specify it in terms of pointer offsets.
In languages that have slices, it will carry a pointer to its first element and something that indicates the length. Some languages have custom ranges of index (e.g. -7..7 rather than 0..14], in which case slices will have that as well. This extra information allows bounds checking and (like I said) custom ranges of indices.
Of course, the pointer will be there in assembly, but it's not exposed to the programmer.
Just like how you don't need to make the programmer write custom tables of function pointers to have inheritance, and you don't need to make the programmer use pointers to have out variables, you don't need to make the programmer use pointers to let them use arrays.