Right, even simpler, how can "first" element index be "zero".
In C there is no indexing or actual arrays with elements, it is just a block of memory and "indexing" is syntax sugar for pointer arithmetics. For C the index means the offset in a particular direction from the pointer (and the eventual dereference); here 0 as index is necessity not a feature.
In languages such as Lua, indexing is an actual instruction, supported by specific set of objects. However, everything copied C and so programmers expect 0 as the "first" element.
I am also guilty of this, my scripting language has lists and the first element is at index 0, oopsie. Not only this, because the language is based off of Lua, in the C API interface the first stack value is also at index 0, hehe (subject to change).
-- Jure