Multidimensional Arrays

Multidimensional Arrays
Chapter 13
1
The plural of mongoose
starts with a "p"
Initializing a
multidimensional
array
0
1
2
Printing the
contents of
an array
3
0
7
0
12
5
1
2
3
4
2 13 6 -4
6 3 -9 5
4 3 1 -1
2 -2 8 10
Processing
by row
Processing
by column
2
3
Two dimensional Arrays

A collection of components
– all of the same type
– structured in TWO dimensions
– each component accessed by a PAIR of indices
representing the component’s position in each
dimension
0
1
2
3
4
0
Which cell is
Location (2,3) ?
1
2
3
7
0
12
5
2 13 6 -4
6 3 -9 5
4 3 1 -1
2 -2 8 10
4
Declaring Two Dimensional Arrays

Syntax:
data_type array_name [row_dim][col_dim];

Example:
int
First element is
int_table[0][0]
 Last element is
int_table[4][3]

int_table [5][4];
0
0
1
2
3
7
0
12
5
1
2
3
4
2 13 6 -4
6 3 -9 5
4 3 1 -1
2 -2 8 10
5
Processing Two-D Arrays

Arrays processed in some pattern
– random
– along rows
– along columns
– whole array

We will use the declaration shown below:
int int_table [5][4];
int row, col;
6
Processing Two-D Arrays

What does the routine below do with the
array? What should we name the function?
total_a_row
0
7
Processing Two-D Arrays

What does this routine below do with the
array? What should we name the function?
total_column
0
8
Processing Two-D Arrays
This function initializes an array.
 Fill in the blanks with the correct identifiers

3
col
table
value
9
Printing a Table
We must process each row, item by item
 Which will be the inner loop?
Which will be the outer loop?
 The LCV of the inner loop must be the one
which changes the most often

What goes
here?
row
col
endl
row
col
row
col
10
Passing Arrays as Parameters

Recall declaration for 1-D array
void whatever ( float

num_list [ ], int
size);
we didn’t specify the size in the brackets
– we sent the size as a separate parameter

Recall name of the array is a pointer
constant
– tells where the array starts in memory
– this is what is passed to the function
Passing 2-D Arrays as
Parameters

For a 2-D array, declare
void whatever ( float

11
num_table [ ][4], int num_rows);
We are sending the starting address
– also how many elements it takes to jump us to
the next row
– that is -- the number of columns

Note that this could be for an array for ANY
number of rows, but exactly 4 columns

As with 1-D, we also send another parameter for
the function as a limiting value
12
Alternate 2-D Array Definition
Think of the 2-D array as an array of arrays
 Example

typedef float rent_pmts [12];
rent_pmts renters [6];

Each element of
renters is an array
of rent_pmts
0
1
…
10
11
50 50 … 50 50
1 50 50 … 50 50
… … …
…
5 50 50 … 50 50
0
13
Multidimensional Arrays

C++ arrays not limited to two dimensions
– limitation is amount of memory
const int NUM_BLDGS = 10;
const int APTS_PER_BLDG = 12;
float apt_pmts [NUM_BLDGS][6][APTS_PER_BLDG];
50 50 … 50 50
50 50 … 50 50
… … …
50 50 … 50 50
14
Multidimensional Arrays

C++ arrays not limited to two dimensions
– limitation is amount of memory
const int NUM_BLDGS = 10;
const int APTS_PER_BLDG = 12;
float apt_pmts [NUM_BLDGS][6][APTS_PER_BLDG];
This gives a 3-D array with
720 items
apt_pmt [bldg][tennant][apt]
50 50 … 50 50
50 50 … 50 50
… … …
50 50 … 50 50
15
Testing and Debugging
Initialize all components of an array
– no guarantee of what is there to start with
 Use the same number of indeces as the
declaration of array
 Make sure indeces are in order
– don’t reverse row and column references

16
Testing and Debugging
Use meaningful identifiers for the array
name and indeces
 Double check upper and lower bounds on
indeces
– don’t walk off the edge of the array
 When declaring multidimensional array as a
formal parameter
– must state sizes of all but first dimension

17
Testing and Debugging
When calling function with array as
parameter
– sizes of multi-dim actual parameter must
match exactly sizes of formal
 Use typedef statement to define multidimensional array type
– use this for actual and formal parameter
declaration
