# Lab: Multi-Dimensional Arrays

Summary: In today's laboratory, we explore issues pertaining to mutli-dimensional arrays.

Contents:

## Preparation

a. Create a directory for this lab.

b. Add the standard Makefile to that directory. (Note that the `-Wall` flag will give you warnings for some of the code we provide. You can safely ignore some of the warnings.)

## Exercises

### Exercise 1: Initializing Multi-Dimensional Arrays

Here is a sample initialization of a one-dimensional array of integers.

```int ant[5] = { 5, 2, 7, 3, 4 };
```

Figure out how to initialize the two-dimensional array `bat` so that the row zero contains 8, 16, 32, and 64; row one contains 5, 7, 9, and 11; and row two contains 0, 1, 2, 3.

```int bat[3][4] = figure-this-out;
```

### Exercise 2: Multi-Dimensional Arrays as Single-Dimensional Arrays

Suppose we've declared `bat` as above and `cow` and `i` as follows:

```int *cow;
int i;
```

a. What do you expect the effect of the following code to be?

```  cow = (int *) bat;
for (i = 0; i < 12; i++) {
printf("cow[%d]: %d\n", i, cow[i]);
} // for
```

### Exercise 3: Bounds Violations in Multi-Dimensional Arrays

Consider again the declaration of `bat` above.

a. What values do you expect to get for the following?

```  printf ("bat[0][4] = %d\n", bat[0][4]);
printf ("bat[0][7] = %d\n", bat[0][7]);
printf ("bat[1][7] = %d\n", bat[1][7]);
printf ("bat[2][4] = %d\n", bat[2][4]);
```

### Exercise 4: Declarations, Revisited

Consider the following code.

```  int rabbit[2][3] = { 1, 2, 3, 4, 5, 6 };
int r, c;

for (r = 0; r < 2; r++)
for (c = 0; c < 3; c++)
printf ("rabbit[%d,%d] = %d\n", r, c, rabbit[r][c]);
```

a. What do you expect to happen when you try to compile this code?

c. What do you expect to happen when you try to run this code?

### Exercise 5: Printing Arrays

a. Suppose `a` is a NxM array. Write instructions for printing `a` as a grid. For example, for `rabbit` above, we might print

```  1  2  3
4  5  6
```

b. Rewrite your code to work with `rabbit`.

c. Rewrite your code to work with `bat`.

### Exercise 6: Three-Dimensional Arrays

Consider the following declaration of a three-dimensional array:

```int chinchilla[2][3][4];
```

a. How many elements does `chinchilla` have?

b. Check your answer with `sizeof`.

c. Can one initialize `chincilla` while declaring it?

e. Where in memory is `chinchilla[i][j][k]`?

## For Those with Extra Time

Write a function, `printIntMatrix (int rows, int cols, int matrix[rows][cols])`, that prints a matrix as in problem 5.

## History

Monday, 17 February 2003 [Samuel A. Rebelsky]

Tuesday, 2 November 2010 [Samuel A. Rebelsky]

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Tue Nov 2 10:48:01 2010.
The source to the document was last modified on Tue Nov 2 10:48:00 2010.
This document may be found at `http://www.cs.grinnell.edu/~rebelsky/Courses/CSC161/2010F/Labs/multi-arrays-lab.html`.

Samuel A. Rebelsky, rebelsky@grinnell.edu