## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# 16.3. Navigating Arrays

## Problem

You need to iterate through the elements of a single-dimensional, multidimensional, or jagged array using a pointer to that array.

## Solution

To enable iteration, we create an unsafe pointer that points to an array. The manipulation of the array can then be performed through this pointer.

To create a pointer to a single-dimension array, declare and initialize the array:

`int[] intArray = new int[5] {1, 2, 3, 4, 5};`

and then set a pointer, `arrayPtr`, to the address of the first element in this array (we must use the `fixed` keyword to pin the array in the managed heap so that the garbage collector does not move it):

`fixed(int* arrayPtr = &intArray[0])`

Note that this line could also be written as:

`fixed(int* arrayPtr = intArray)`

without any address of (`&`) operator or indexer. This is because the array variable always points to the first element, similar to how C++ array pointers operate.

The following code creates and initializes a pointer to a single-dimension array and then displays the last item in that array:

```unsafe
{
int[] intArray = new int[5] {1, 2, 3, 4, 5};
fixed(int* arrayPtr = &intArray[0])
{
Console.WriteLine(*(arrayPtr + 4)); //Display the last value '5'
}
}```

Creating a pointer to an array of enumeration values is very similar:

```unsafe
{
Colors[] intArray = new Colors[2] {Colors.Red, Colors.Blue};
fixed(Colors* arrayPtr = &intArray[0])
{
// Use arrayPtr here
}
}```

where `Colors` is declared as follows:

`public enum Colors{Red, Green, Blue}`

The last element of the ...

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required