C Programming/Arrays
From Wikibooks, the open-content textbooks collection
[edit] Arrays & Strings
Arrays in C act to store related data under a single variable name with an index, also known as a subscript. It is easiest to think of an array as simply a list or ordered grouping of variables. As such, arrays often help a programmer organize collections of data efficiently and intuitively.
Later we will consider the concept of a pointer, fundamental to C, which extends the nature of the array. For now, we will consider just their declaration and their use.
[edit] Arrays
If we want an array of six integers , called "numbers", we write in C
int numbers[6];
For a character array called letters,
char letters[6];
and so on.
If we wish to initialize as we declare, we write
int point[6]={0,0,1,0,0,0};
If not all elements in the array are initialized, the remaining elements will contain a value of 0.
If we want to access a variable stored in an array, for example with the above declaration, the following code will store a 1 in the variable x
int x; x = point[2];
Arrays in C are indexed starting at 0, as opposed to starting at 1. The first element of the array above is point[0]. The index to the last value in the array is the array size minus one. In the example above the subscripts run from 0 through 5. C does not guarantee bounds checking on array accesses. The compiler may not complain about the following (though the best compilers do):
char y; int z = 9; char point[6] = { 1, 2, 3, 4, 5, 6 }; //examples of accessing outside the array. A compile error is not always raised y = point[15]; y = point[-4]; y = point[z];
During program execution, an out of bounds array access does not always cause a run time error. Your program may happily continue after retrieving a value from point[-1]. To alleviate indexing problems, the sizeof() expression is commonly used when coding loops that process arrays.
int ix; short anArray[]= { 3, 6, 9, 12, 15 }; for (ix=0; ix< (sizeof(anArray)/sizeof(short)); ++ix) { DoSomethingWith( anArray[ix] ); }
Notice in the above example, the size of the array was not explicitly specified. The compiler knows to size it at 5 because of the five values in the initializer list. Adding an additional value to the list will cause it to be sized to six, and because of the sizeof expression in the for loop, the code automatically adjusts to this change. Good programming practice is declare a variable size and store the size of the array.
size = sizeof(anArray)/sizeof(short)
C also supports multi dimensional arrays (or, rather, arrays of arrays). The simplest type is a two dimensional array. This creates a rectangular array - each row has the same number of columns. To get a char array with 3 rows and 5 columns we write in C
char two_d[3][5];
To access/modify a value in this array we need two subscripts:
char ch; ch = two_d[2][4];
or
two_d[0][0] = 'x';
Similarly, a multi-dimensional array can be initialized like this:
int two_d[2][3] = {{ 5, 2, 1 }, { 6, 7, 8 }};
The amount of columns must be explicitly stated; however, the compiler will find the appropriate amount of rows based on the initializer list.
There are also weird notations possible:
int a[100]; int i = 0; if (a[i]==i[a]) { printf("Hello World!\n"); }
a[i] and i[a] refer to the same location. (This is explained later in the next Chapter.)
[edit] Strings
C has no string handling facilities built in; consequently, strings are defined as arrays of characters. C allows a character array to be represented by a character string rather than a list of characters, with the null terminating character automatically added to the end. For example, to store the string "Merkkijono", we would write
char string[] = "Merkkijono";
or
char string[] = {'M', 'e', 'r', 'k', 'k', 'i', 'j', 'o', 'n', 'o', '\0'};
There is a useful library of string handling routines which you can use by including another header file.
#include <stdio.h> #include <string.h> //new header file int main(void) { ... }
We discuss the standard string library in the Strings chapter.

