So far, we've been looking at 1-Dimensional (1D) arrays. You can imagine a 1D array as a row of boxes. Now, picture a 2-Dimensional (2D) array a sheet of graph paper - you can store values (integers, floats, doubles, chars, bools) in these rows and columns of boxes.
Let's take a look at a simple example of a 2D array :
// file : 2d.C
// lame program to demonstrate basics of 2D arrays
#include <iostream.h>
const int ROWS=4;
const int COLUMNS=7;
int main()
{
char array[ROWS][COLUMNS]; // creates the 2D array of characters
int i;
// put some junk in the array
array[0][3]='k';
array[ROWS-1][COLUMNS-1]='z';
for (i=0 ; i<ROWS ; i++)
array[i][i] = 'A' + i;
for (i=0 ; i<COLUMNS ; i++)
array[2][i]='X';
// print out some of that junk to confirm that it's there
cout << array[0][3] << endl;
cout << array[1][1] << endl;
cout << array[2][5] << array[2][6] << endl;
// 2D arrays can be used in comparisons also
if (array[0][3]=='k')
cout << "uh huh..." << endl;
else
cout << "nope" << endl;
if (array[1][1]=='B')
cout << "yup" << endl;
else
cout << "not a 'B'" << endl;
return 0;
}
Now let's do something more useful with arrays. Consider the following :
// file : matrix.C
// this program multiplies two 3x3 matrices together
#include <iostream.h>
const int SIZE=3;
int main()
{
int A[SIZE][SIZE]; int B[SIZE][SIZE]; int R[SIZE][SIZE];
int r,c;
// nested 'for' loops to cycles through the entire array - this
// is new and is extremely important to understand
cout << "Enter the values for the first matrix :" << endl;
for (r=0 ; r<SIZE ; r++)
for (c=0 ; c<SIZE ; c++)
cin >> A[r][c];
cout << "Enter the values for the second matrix :" << endl;
for (r=0 ; r<SIZE ; r++)
for (c=0 ; c<SIZE ; c++)
cin >> B[r][c];
// now multiply them together
R[0][0] = A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0];
R[0][1] = A[0][0]*B[0][1] + A[0][1]*B[1][1] + A[0][2]*B[2][1];
R[0][2] = A[0][0]*B[0][2] + A[0][1]*B[1][2] + A[0][2]*B[2][2];
R[1][0] = A[1][0]*B[0][0] + A[1][1]*B[1][0] + A[1][2]*B[2][0];
R[1][1] = A[1][0]*B[0][1] + A[1][1]*B[1][1] + A[1][2]*B[2][1];
R[1][2] = A[1][0]*B[0][2] + A[1][1]*B[1][2] + A[1][2]*B[2][2];
R[2][0] = A[2][0]*B[0][0] + A[2][1]*B[1][0] + A[2][2]*B[2][0];
R[2][1] = A[2][0]*B[0][1] + A[2][1]*B[1][1] + A[2][2]*B[2][1];
R[2][2] = A[2][0]*B[0][2] + A[2][1]*B[1][2] + A[2][2]*B[2][2];
// print out the resulting matrix
cout << "The resultant matrix is" << endl;
for (r=0 ; r<SIZE ; r++)
{
for (c=0 ; c<SIZE ; c++)
cout << R[r][c] << "\t";
cout << endl;
}
return 0;
}