Content deleted Content added
m improve recent change |
Gareth Owen (talk | contribs) →Arrays: Slightly tweak that improvement. |
||
Line 29:
Although C supports static arrays, it is not required that array indexes be validated ([[bounds checking]]). For example, one can write to the sixth element of an array with five elements, yielding generally undesirable results. This type of bug, called a ''[[buffer overflow]],'' has been notorious as the source of a number of security problems. On the other hand, since [[bounds checking elimination]] technology was largely nonexistent when C was defined, bounds checking came with a severe performance penalty, particularly in numerical computation. By comparison, a few years earlier some [[Fortran]] compilers had a switch to toggle bounds checking on or off; however, this would have been much less useful for C, where array arguments are passed as simple pointers.
Multidimensional arrays are commonly used in numerical algorithms (mainly from applied [[linear algebra]]) to store matrices. The structure of the C array is particularly well suited to this particular task, provided one remembers to count indices starting from 0 instead of 1. However, since arrays are passed merely as pointers, the bounds of the array must be known fixed values or else explicitly passed to any subroutine that requires them, and dynamically sized arrays of arrays cannot be accessed
C99 introduced "variable-length arrays" which address some, but not all, of the issues with ordinary C arrays.
|