There is a deep connection between the pointers and arrays. In many situations, pointers and arrays can actually be used interchangeably. For instance, a pointer that points to the start of an array can be used to access that array using either array-style indexing or pointer arithmetic.
Consider the following C++ program as an example:
#include <iostream>
using namespace std;
const int MAX = 5;
int main () {
int var[MAX] = {20, 200, 400, 800, 1000};
int *ptr;
// let us have array address in pointer.
ptr = var;
for (int i = 0; i < MAX; i++) {
cout << "Address of var will be [" << i << "] = ";
cout << ptr << endl;
cout << "Value of var will be[" << i << "] = ";
cout << *ptr << endl;
// point to the next location
ptr++;
}
return 0;
}
Output:
Address of var will be [0] = 0x7ffd063d4750 Value of var will be[0] = 20 Address of var will be [1] = 0x7ffd063d4754 Value of var will be[1] = 200 Address of var will be [2] = 0x7ffd063d4758 Value of var will be[2] = 400 Address of var will be [3] = 0x7ffd063d475c Value of var will be[3] = 800 Address of var will be [4] = 0x7ffd063d4760 Value of var will be[4] = 1000
Pointers and arrays are not entirely interchangeable, though.
Through an example let us understand this more clearly
#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
int var[MAX] = {10, 100, 200};
for (int i = 0; i < MAX; i++) {
*var = i; // correct syntax
var++; // incorrect syntax
}
return 0;
}
While using the pointer operator * on var is permissible, changing the value of var is prohibited. This is because var cannot be used as an l-value because it is a constant that will always point to the starting of an array.
With a simple example let us understand the concept of an array of pointers. For that let us write a C++ program that mainly uses a set of four integers as an array.
#include <iostream> using namespace std; const int MAX = 4; int main () { int var[MAX] = {20, 200, 400, 800}; for (int i = 0; i < MAX; i++) { cout << "Value of var[" << i << "] = "; cout << var[i] << endl; } return 0; }
Output:
Value of var[0] = 20 Value of var[1] = 200 Value of var[2] = 400 Value of var[3] = 800
There may be times when we need to keep an array that can hold pointers to every possible data type, including int, char, and others.
The declaration of an array of pointers to an integer is provided below.
int *ptr[MAX];
According to this, ptr is a set of MAX integer pointers. As a result, a pointer to an int value is now stored in each element of ptr. The example below uses four integers, which are stored in the following array of pointers:
#include <iostream>
using namespace std;
const int MAX = 4;
int main () {
int var[MAX] = {100, 1000, 2000, 3000};
int *ptr[MAX];
for (int i = 0; i < MAX; i++) {
ptr[i] = &var[i]; // assign the address of an integer.
}
for (int i = 0; i < MAX; i++) {
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
return 0;
}
Output:
Value of var[0] = 100 Value of var[1] = 1000 Value of var[2] = 2000 Value of var[3] = 3000
You may also use an array of pointers in order to hold a list of strings as seen below.
#include <iostream>
using namespace std;
const int MAX = 5;
int main () {
const char *names[MAX] = { "Pathu Khan", "Ali Kapoor", "Zera Vishal", "Kara Johar Ali Bose" };
for (int i = 0; i < MAX; i++) {
cout << "Value of names will be[" << i << "] = ";
cout << (names + i) << endl;
}
return 0;
}
Output:
Value of names will be[0] = 0x7fffe86d2910 Value of names will be[1] = 0x7fffe86d2918 Value of names will be[2] = 0x7fffe86d2920 Value of names will be[3] = 0x7fffe86d2928 Value of names will be[4] = 0x7fffe86d2930