# Pointer to an array

We can also point the whole array using pointers.

Using the array pointer, we can easily manipulate the multi-dimensional array.

#### Example

```int arr[5] = {10, 20, 30, 40, 50};
int (*ptr)[5];
ptr = &arr;
```

Where, ptr points the entire array.

## Dereferencing the array pointer

Since ptr is an array pointer,

*ptr will be again an address which is the address of the first element in the array.

**ptr will be the value stored at the address.

Example

```/*
* Pointer to an array example
*/

#include<stdio.h>

int main()
{
int arr[5]={10, 20, 30, 40, 50};
int (*ptr)[5];    //pointer to an array of 5 integers

ptr = &arr;      //ptr references the whole array

printf("Address of the array = %p\n",ptr);
printf("Address of the first element in the array = %p\n", *ptr);
printf("Value of the first element = %d\n",**ptr);

return 0;
}

```

## ptr+1 vs *ptr+1

ptr + 1 *ptr + 1

ptr is a pointer to an entire array. So, if we move ptr by 1 position it will point the next block of 5 elements.

*ptr is a pointer to the first element of the array.So, if we move *ptr by 1 position it will point the second element.

If the array base address is 1000,ptr+1 will be 1000 + (5 * 4) which is 1020

If the array base address is 1000, *ptr+1 will be 1000 + 4 which is 1004

Example

```/*
* Pointer to an array
*/

#include<stdio.h>

int main()
{
int arr[5]={10, 20, 30, 40, 50};
int (*ptr)[5];    //pointer to an array of 5 integers

ptr = &arr;      //ptr references the whole array

/*
*ptr is a pointer to the whole array
*ptr+1 will point the next block of 5 elements
*/
printf("ptr = %p \t ptr+1 = %p\n",ptr,ptr+1);

/*
*ptr is a pointer to the first element in the array
*ptr+1 will point the next element in the array
*/
printf("*ptr = %p \t *ptr+1 = %p\n",*ptr,*ptr+1);

return 0;
}
```