# Pointer arithmetic in C

Written by

Namrata Jangid

Pointer arithmetic:
Incrementing a pointer –
We use the ++ to increment the pointer. Since pointers store addresses, it makes sense to increase a pointer only when we are making use of arrays.
Syntax for incrementing a pointer:

```pointerName++
```

Let us look at the code snippet below to see how we can increment pointers:

```#include <stdio.h>

int main () {

int  arr[] = {11, 12, 13};
int  i, *ptr;

ptr = arr; //pointer ptr points to the first location in the array

for ( i = 0; i < 3; i++) {

printf("Address of arr[%d] : %x\n", i, ptr );
printf("Value of arr[%d] : %d\n", i, *ptr );

ptr++; //move to the next location in array
}
return 0;
}
```
• We have assumed that integer values are 32 bits.
• Pointer ptr points to the first location in array
• We are propagating through the array arr by moving to the next location in the array by incrementing the pointer.
• Initially, the pointer points to the location where the first value in the array is stored.
• Every time we increment the pointer, we are moving to the location of the next value in the array.

The output of the above code will be:

```Address of arr[0] = 3ab6a954
Value of arr[0] = 11
Value of arr[1] = 12
Value of arr[2] = 13
```

Decrementing a pointer –
Decrementing a pointer is the same as incrementing a pointer. We decrement the pointer in cases where are have the pointer point to an array.
Syntax for decrementing a pointer:

```pointerName--
```

Let us look at the code snippet below to see how we can decrement pointers:

```#include <stdio.h>

int main () {

int  arr[] = {11, 12, 13};
int  i, *ptr;

ptr = &arr[3-1]; // pointer points to the last location in the array

for ( i = 2; i >= 0; i--) {

printf("Address of arr[%d] : %x\n", i, ptr );
printf("Value of arr[%d] : %d\n", i, *ptr );

ptr--;//move to the previous location in the array
}

return 0;
}
```
• We have assumed that integer values are 32 bits.
• Pointer ptr points to the last location in array
• We are propagating through the array arr in reverse orderby moving to the previous location in the array by decrementing the pointer.
• Initially, the pointer points to the location where the last value in the array is stored.
• Every time we increment the pointer, we are moving to the location of the previous value in the array.

The output of the above code will be:

```Address of arr[2] : c7207c2c
Value of arr[2] : 13