In C, a pointer array is a homogeneous collection of indexed pointer variables that are references to a memory location. It is generally used in C Programming when we want to point at multiple memory locations of a similar data type in our C program. We can access the data by dereferencing the pointer pointing to it.
Syntax:
pointer_type *array_name [array_size];
Note: It is important to keep in mind the operator precedence and associativity in the array of pointers declarations of different type as a single change will mean the whole different thing. For example, enclosing *array_name in the parenthesis will mean that array_name is a pointer to an array.
Example:
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Explanation:
As shown in the above example, each element of the array is a pointer pointing to an integer. We can access the value of these integers by first selecting the array element and then dereferencing it to get the value.
One of the main applications of the array of pointers is to store multiple strings as an array of pointers to characters. Here, each pointer in the array is a character pointer that points to the first character of the string.
Syntax:
char *array_name [array_size];
After that, we can assign a string of any length to these pointers.
Example:
Note: Here, each string will take different amount of space so offset will not be the same and does not follow any particular order.
This method of storing strings has the advantage of the traditional array of strings. Consider the following two examples:
Example 1:
String array Elements are: Geek Geeks Geekfor
In the above program, we have declared the 3 rows and 10 columns of our array of strings. But because of predefining the size of the array of strings the space consumption of the program increases if the memory is not utilized properly or left unused. Now let’s try to store the same strings in an array of pointers.
Example 2:
geek Geeks Geeksfor Address of arr[0]: 0x400634 Address of arr[1]: 0x400639 Address of arr[2]: 0x40063f
Here, the total memory used is the memory required for storing the strings and pointers without leaving any empty space hence, saving a lot of wasted space. We can understand this using the image shown below.
The space occupied by the array of pointers to characters is shown by solid green blocks excluding the memory required for storing the pointer while the space occupied by the array of strings includes both solid and light green blocks.
Not only we can define the array of pointers for basic data types like int, char, float, etc. but we can also define them for derived and user-defined data types such as arrays, structures, etc. Let’s consider the below example where we create an array of pointers pointing to a function for performing the different operations.
Example:
Sum : 55 Difference : 45 Product : 250 Quotient : 10
An array of pointers is useful in a wide range of cases. Some of these applications are listed below:
The array of pointers also has its fair share of disadvantages and should be used when the advantages outweigh the disadvantages. Some of the disadvantages of the array of pointers are: