The zero-based approach makes sense in C, where it is syntactic sugar and `a[i]` is equal to `*(a + i)` Treating it as offset of 0 is logical.
The more you go away from raw pointer semantics the less intuitive it gets.
The more you go away from raw pointer semantics the less intuitive it gets.