On 7 Jun 2017 07:20 -0600, from arnold(a)skeeve.com:
Basically, until C came along, the standard practice
was for indices
to start at 1. Certainly Fortran and Pascal did it that way. I suspect
that all the Algol family languages did too, but I only did a little
Algol W programming in colledge and that was long ago. I think Cobol also.
On the other hand, before C, both B and BCPL used zero-based indexing.
So if we trace C's family tree, there is certainly precedence for
zero-based indexing into arrays.
https://www.bell-labs.com/usr/dmr/www/kbman.pdf page 8 (PDF page 10)
says:
7. A vector is a primary expression followed by any
expression in []
brackets. The two expressions are evaluated to rvalues, added and
the result is used as an lvalue. The primary expression can be
thought of as a pointer to the base of a vector, while the bracketed
expression can be thought of as the offset in the vector. Since
E1[E2] is identical to *(E1+E2), and addition is commutative, the
base of the vector and teh offset in the vector can swap positions.
And
https://www.bell-labs.com/usr/dmr/www/bcpl.pdf page 11 (PDF page
14) says:
4.7 Vector Applications
/.../
Semantics: A vector is represented by a pointer to a consecutive
group of words which are the elements of the vector. The pointer
points to the zeroth element.
--
Michael Kjörling •
https://michael.kjorling.se • michael(a)kjorling.se
“People who think they know everything really annoy
those of us who know we don’t.” (Bjarne Stroustrup)