Array of pointers in C

Just like we can declare an array of `int`, `float` or `char` etc, we can also declare an array of pointers, here is the syntax to do the same.

Syntax: `datatype *array_name[size];`

Let's take an example:

``int *arrop[5];``

Here `arrop` is an array of 5 integer pointers. It means that this array can hold the address of 5 integer variables, or in other words, you can assign 5 pointer variables of type pointer to `int` to the elements of this array.

The following program demonstrates how to use an array of pointers.

``````#include<stdio.h>
#define SIZE 10

int main()
{
int *arrop[3];
int a = 10, b = 20, c = 50, i;

arrop[0] = &a;
arrop[1] = &b;
arrop[2] = &c;

for(i = 0; i < 3; i++)
{
printf("Address = %d\t Value = %d\n", arrop[i], *arrop[i]);
}

return 0;
}``````

Expected Output:

``````Address = 2686764 Value = 10
Address = 2686760 Value = 20
Address = 2686756 Value = 50``````

How it works

Notice how we are assigning the addresses of `a`, `b` and `c`. In line 9 we are assigning the address of variable a to the 0th element of the of the array. Similarly, the address of `b` and `c` is assigned to 1st and 2nd element respectively. At this point  `arr_of_pointer` looks something like this:

`arrop[i]` gives the address of ith element of the array. So `arrop[0]` returns address of variable a, `arrop[1]` returns address of `b` and so on. To get the value at address use indirection operator (`*`).

``*arrop[i]``

So `*arrop[0]` gives value at `address[0]`, Similarly `*arrop[1]` gives the value at address `arrop[1]` and so on.