Pointer arithmetic in c | C - pointer arithmetic | Address arithmetic in c | Pointer | pointer arithmetic in c programing | My CS Tutorial
C programming allow users just like you to do arithmetic operations using pointers. So, programmers(users) can perform any arithmetic operations like increment, decrement and comparison using pointer variables. In c, performing arithmetic operations using pointer variables is said to be arithmetic pointer.
Pointer arithmetic in c | My CS Tutorial |
Pointer Arithmetic
A pointer in C is an address, which is a numeric value. Therefore, you can
perform arithmetic operations on a pointer just as you can on a numeric value.
There are four arithmetic operators that can be used on pointers: ++, --, +, and
-
To understand pointer arithmetic, let us consider that ptr is an integer pointer
which points to the address 1000. Assuming 32-bit integers, let us perform the
following arithmetic operation on the pointer:-
ptr++
After the above operation, the ptr will point to the location 1004 because each
time ptr is incremented, it will point to the next integer location which is 4 bytes next to the current location. This operation will move the pointer to the next memory location without impacting the actual value at the memory location.
If ptr points to a character whose address is 1000, then the above operation will point to the location 1001 because the next character will be available at 1001.
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>
const int MAX = 3;
int main ()
{
int var[] = {150, 10, 50};
int i, *ptr;
/* let us have array address in pointer */
ptr = var;
for ( i = 0; i < MAX; i++)
{
printf("Address of var[%d] = %x\n", i, ptr );
printf("Value of var[%d] = %d\n", i, *ptr );
/* move to the next location */
ptr++;
}
return 0;
}
When the above code is compiled and executed, it produces the following result:-
Address of var[0] = bf882b30
Value of var[0] = 150
Address of var[1] = bf882b34
Value of var[1] = 10
Address of var[2] = bf882b38
Value of var[2] = 50
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>
const int MAX = 3;
int main ()
{
int var[] = {95, 50, 250};
int i, *ptr;
/* let us have array address in pointer */
ptr = &var[MAX-1];
for ( i = MAX; i > 0; i--)
{
printf("Address of var[%d] = %x\n", i, ptr );
printf("Value of var[%d] = %d\n", i, *ptr );
/* move to the previous location */
ptr--;
}
return 0;
}
When the above code is compiled and executed, it produces the following result:-
Address of var[3] = bfedbcd8
Value of var[3] = 250
Address of var[2] = bfedbcd4
Value of var[2] = 50
Address of var[1] = bfedbcd0
Value of var[1] = 95
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>
const int MAX = 3;
int main ()
{
int var[] = {10, 100, 200};
int i, *ptr;
/* let us have address of the first element in pointer */
ptr = var;
i = 0;
while ( ptr <= &var[MAX - 1] )
{
printf("Address of var[%d] = %x\n", i, ptr );
printf("Value of var[%d] = %d\n", i, *ptr );
/* point to the previous location */
ptr++;
i++;
}
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
Other example of pointer comparison is given here:-
#include <stdio.h>
int main()
{
int a = 50, b = 60;
int *ptr, *ptr1;
ptr = &a;
ptr1 = &b;
if(*ptr > *ptr1)
printf("\n value stored in a is greater than b ");
else
printf("\n value stored in b is greater than a ");
return 0;
}
When the above code is compiled and executed, it produces the following result:-
value stored in b is greater than a
Pointer arithmetic in c | C - pointer arithmetic | Address arithmetic in c | Pointer | pointer arithmetic in c programing | My CS Tutorial
Please share this post and blog link with your friends.For more programs use this blog.
If you have any problem, please comment in comment box, subscribe this blog for notifications of new post on your email and follow this blog.If you have any method of this program or want to give any suggestion send email on hc78326@gmail.com
Created by-- HARSH CHAUHAN
No comments:
Post a Comment