Among other things, this feature allows a single iterative statement to process arbitrarily many elements of an array variable.
These axioms do not place any constraints on the set of valid index tuples I, therefore this abstract model can be used for triangular matrices and other oddly-shaped arrays.
Most of those languages also restrict each index to a finite interval of integers, that remains fixed throughout the lifetime of the array variable.
On the other hand, some programming languages provide more liberal array types, that allow indexing by arbitrary values, such as floating-point numbers, strings, objects, references, etc..
The number of indices needed to specify an element is called the dimension, dimensionality, or rank of the array type.
(This nomenclature conflicts with the concept of dimension in linear algebra, which expresses the shape of a matrix.
Thus, an array of numbers with 5 rows and 4 columns, hence 20 elements, is said to have dimension 2 in computing contexts, but represents a matrix that is said to be 4×5-dimensional.
Thus an element in row i and column j of an array A would be accessed by double indexing (A[i][j] in typical notation).
This is the case in some scripting languages such as Awk and Lua, and of some array types provided by standard C++ libraries.
Some languages (like Pascal and Modula) perform bounds checking on every access, raising an exception or aborting the program when any index is out of its valid range.
Good compilers may also analyze the program to determine the range of possible values that the index may have, and this analysis may lead to bounds-checking elimination.
Some languages, such as C, provide only zero-based array types, for which the minimum valid value for any index is 0.
With a language such as C, a pointer to the interior of any array can be defined that will symbolically act as a pseudo-array that accommodates negative indices.
A few languages, such as Pascal and Lua, support n-based array types, whose minimum legal indices are chosen by the programmer.
Languages providing array programming capabilities have proliferated since the innovations in this area of APL.
Some programming languages provide operations that return the size (number of elements) of a vector, or, more generally, range of each index of an array.
In C++ a std::vector object supports the store, select, and append operations with the performance characteristics discussed above.
Other array types (such as Pascal strings) provide a concatenation operator, which can be used together with slicing to achieve that effect and more.
Alternatively, the append operation may re-allocate the underlying array with a larger size, and copy the old elements to the new area.