# 2 Dimensional Arrays

Implementing a database of information as a collection of arrays can be inconvenient when we have to pass many arrays to utility functions to process the database. It would be nice to have a single data structure which can hold all the information, and pass it all at once.

2-dimensional arrays provide most of this capability. Like a 1D array, a 2D array is a collection of data cells, all of the same type, which can be given a single name. However, a 2D array is organized as a matrix with a number of rows and columns.

### How do we declare a 2D array?

Similar to the 1D array, we must specify the data type, the name, and the size of the array. But the size of the array is described as the number of rows and number of columns. For example:
```     int a[MAX_ROWS][MAX_COLS];

```
This declares a data structure that looks like:

### How do we access data in a 2D array?

Like 1D arrays, we can access individual cells in a 2D array by using subscripting expressions giving the indexes, only now we have two indexes for a cell: its row index and its column index. The expressions look like:
```     a[i][j] = 0;
```
or
```     x = a[row][col];

```
We can initialize all elements of an array to 0 like:
```     for(i = 0; i < MAX_ROWS; i++)
for(j = 0; j < MAX_COLS; j++)
a[i][j] = 0;

```

### How do we pass a 2D array to a function?

Again, like 1D arrays, we simply pass the array by using its name, which is a pointer to the entire block of data cells:
```     process(a);

```
But how do we declare a 2D array in the header of the function?

To understand this we have to look

to Overview.