C Pointers Arithmetics
C Pointers Arithmetics
Incrementing a Pointer
We prefer using a pointer in our program instead of an array because the
variable pointer can be incremented, unlike the array name which cannot be
incremented because it is a constant pointer. The following program
increments the variable pointer to access each succeeding element of the
array −
#include <stdio.h>
int main () {
return 0;
}
When the above code is compiled and executed, it produces the following result –
Address of var[0] = bf882b30
Value of var[0] = 10
Address of var[1] = bf882b34
Value of var[1] = 100
Address of var[2] = bf882b38
Value of var[2] = 200
Decrementing a Pointer
The same considerations apply to decrementing a pointer, which decreases its
value by the number of bytes of its data type as shown below −
#include <stdio.h>
int main () {
return 0;
}
When the above code is compiled and executed, it produces the following
result −
Address of var[2] = bfedbcd8
Value of var[2] = 200
Address of var[1] = bfedbcd4
Value of var[1] = 100
Address of var[0] = bfedbcd0
Value of var[0] = 10
Pointer Comparisons
Pointers may be compared by using relational operators, such as ==, <, and >.
If p1 and p2 point to variables that are related to each other, such as elements
of the same array, then p1 and p2 can be meaningfully compared.
The following program modifies the previous example − one by incrementing
the variable pointer so long as the address to which it points is either less than
or equal to the address of the last element of the array, which is &var[MAX - 1]
−
#include <stdio.h>
int main () {
return 0;
}
When the above code is compiled and executed, it produces the following
result −
Address of var[0] = bfdbcb20
Value of var[0] = 10
Address of var[1] = bfdbcb24
Value of var[1] = 100
Address of var[2] = bfdbcb28
Value of var[2] = 200
C - Array of pointers
Before we understand the concept of arrays of pointers, let us consider the
following example, which uses an array of 3 integers −
#include <stdio.h>
int main () {
return 0;
}
When the above code is compiled and executed, it produces the following
result −
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
There may be a situation when we want to maintain an array, which can store
pointers to an int or char or any other data type available. Following is the
declaration of an array of pointers to an integer −
int *ptr[MAX]; or int *ptr[10];
It declares ptr as an array of MAX integer pointers. Thus, each element in ptr,
holds a pointer to an int value. The following example uses three integers,
which are stored in an array of pointers, as follows −
#include <stdio.h>
int main () {
When the above code is compiled and executed, it produces the following
result −
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
You can also use an array of pointers to character to store a list of strings as
follows −
#include <stdio.h>
int main () {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};
int i = 0;
return 0;
}
When the above code is compiled and executed, it produces the following
result −
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali