typeName variableName[size];
This declares an array with the specified size, named variableName, of type typeName. The array is indexed from 0 to size-1. The size (in brackets) must be an integer literal or a constant variable.
Examples:
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers
The last example illustrates a two dimensional array (which we often
like to think about as a table). We usually think of the first size
as rows, and the second as columns, but it really does not matter, as long
as you are consistent! So, we could think of the last declaration
as a table with 5 rows and 10 columns, for example.
int x; x = 0;
Or, we could simply initialize the variable in the declaration statement itself:
int x = 0;
Can we do the same for arrays? Yes, for the built-in types. Simply list the array values (literals) in set notation { } after the declaration. Here are some examples:
int list[4] = {2, 4, 6, 8}; char letters[5] = {'a', 'e', 'i', 'o', 'u'}; double numbers[3] = {3.45, 2.39, 9.1}; int table[3][2] = {{2, 5} , {3,1} , {4,9}};
Character arrays are special cases, because we use strings so often. There is no built-in string type in the language. Instead, we implement strings as null-terminated character arrays. You can initialize a character array with a string literal (i.e. a string in double quotes), as long as you leave room for the null character '\0', which has ASCII value 0:
char name[7] = "Johnny";
Notice that this would be equivalent to:
char name[7] = {'J', 'o', 'h', 'n', 'n', 'y', '\0'};
Note: Array declarations must contain the information about the size of the array. It is possible to leave the size out of the [ ] in the declaration as long as you initialize the array inline, in which case the array is made just large enough to capture the initialized data. Examples:
char name[] = "Johnny"; // size is 7 int list[] = {1, 3, 5, 7, 9}; // size is 5
Note: Using initializers on the declaration, as in the examples above, is
probably not going to be as feasible (or desirable) with very large arrays.
Another common way to initialize an array -- with a for loop:
This example initializes the array numList to {0, 2, 4, 6, 8, 10, 12,
14, 16, 18}.
int numList[10]; for (int i = 0; i < 10; i++) numList[i] = i * 2;
int x, list[5]; // declaration double nums[10]; // declaration list[3] = 6; // assign value 6 to array item with index 3 cout << nums[2]; // output array item with index 2 list[x] = list[x+1];
It would not be appropriate, however, to use an array index that is outside the bounds of the valid array indices:
list[5] = 10; // bad statement, since your valid indices are 0 - 4.
The statement above is syntactically legal, however. It is the
programmer's job to make sure that out of bounds indices are not used.
Do not count on the compiler to check it for you -- it will not!
int list1[5]; int list2[5] = {3, 5, 7, 9, 11};
With variables, we use the assignment statement, so this would be the natural tendency -- but it is wrong!
list1 = list2; // this does NOT copy the array contents
We must copy between arrays element by element. A for loop makes this easy, however:
for (int i = 0; i < 5; i++) list1[i] = list2[i];
char greeting[] = "Hello"; char word1[20]; cout << greeting[1]; // prints the letter 'e' cout << greeting[4]; // prints the letter 'o'
Strings can also be output and input in their entirety, with the standard
input and output objects (cin and cout):
This line outputs the word "Hello":
cout << greeting;
This line allows the entry of a word (up to 19 characters and a terminating null character) from the keyboard, which is stored in the array word1:
cin >> word1;
Characters are read from the keyboard until the first "white space"
(space, tab, newline) character is encountered. The input is stored
in the character array and the null character is automatically appended.