Addition of a number to pointer: Pointer+ number
When we add some integer to the pointer then the address stored in the pointer is incremented by
number * sizeof (datatype of pointer)
Assume space required for data types int & char are 2 & 1 bytesresp.
And we represent a particular block of memory filled with random values (not shown) as:

If we declare the pointers as
int *x:
int *y:
int i=3;// starting address of i is 9 and is 2 byte wide.
x=&i;
printf(“value at x is %d”, *x); // output we get is 3 i.e. value stored at location 9 & 10
x=x+1; // now x points to space with starting address 11
printf(“value at x is %d”, *x); // output we get is a random value i.e. value stored at location 11 & 12
x=x+3; // we add 3*2=6 more i.e. now x points to address 17
printf(“value at x is %d”, *x); // output we get is a random value i.e. value stored at location 17 & 18
If we declare the pointers as
char *x:
char *y:
char i // starting address of i is 9 and is 1 byte wide.
x=&i;
printf(“value at x is %d”, *x); // output we get is the value stored at location 9
x=x+1; // we add 1*1=1 and now x points to space with starting address 10
printf(“value at x is %d”, *x); // output we get is a random value i.e. value stored at location 10
x=x+3; // we add 3*1=3 more i.e. now x points to address 13
Subtraction of a number from the pointer : Pointer- number
When we subtract some integer from the pointer then the address stored in the pointer is decremented by
number * sizeof (datatype of pointer)
Assume space required for data types int & char are 2 & 1 bytesresp.
And we represent a particular block of memory filled with random values (not shown) as:

If we declare the pointers as
int *x:
int *y:
int i=3;// starting address of i is 9 and is 2 byte wide.
x=&i;
printf(“value at x is %d”, *x); // output we get is 3 i.e. value stored at location 9 & 10
x=x-1; // now x points to space with starting address 7
printf(“value at x is %d”, *x); //output we get is random value i.e. value stored at location 7& 8h
x=x-3; // we subtact 3*2=6 more i.e. now x points to address 1
printf(“value at x is %d”, *x); // output we get is random value i.e. value stored at location 1&2
If we declare the pointers as
char *x:
char *y:
char i // starting address of i is 9 and is 1 byte wide.
x=&i;
printf(“value at x is %d”, *x); // output we get is the value stored at location 9
x=x-1; // we subtract 1*1=1 and now x points to space with starting address 8
printf(“value at x is %d”, *x); // output we get is a random value i.e. value stored at location 10
x=x-3; // we subtract 3*1=3 more i.e. now x points to address 7
Subtraction of two pointers: Pointer – Pointer
When we subtract two pointers, we get the number of variables of datatype as same as pointer that are stored between the two pointers.
If we use int pointers:
int *x;
int*y;
int i=1;
int y=2;
int d;
Suppose address of i is 3432 and that of j is 4456 and int requires 2 bytes
x=&I;
y=&j;
d= y –x; // answer get is (4456 – 3432)/2 = 1024/2 = 512.
// we divide by 2 as int takes 2 bytes
If we use char pointers:
char *x;
char*y;
char i;
char y;
char d;
Suppose address of i is 3432 and that of j is 4456 and char requires 1 bytes
x=&I;
y=&j;
d= y –x; // answer get is (4456 – 3432)/1 = 1024/1 = 1024.
// we divide by 1 as char takes 1 bytes
All other types of operations on pointers like addition of pointers, multiplying pointer by number, dividing pointer by number are illegal.