# Pointer arithmetic in C programming language

Here we will learn how pointer arithmetic works with pointer variables?

Here, we are taking an example with an integer array; we will declare an integer pointer and initialize the pointer with the base address of integer array.

Consider this example and read the explanation written below the program and output

## C program with pointer arithmetic (++) using int array, pointer of array

```#include <stdio.h>
int main(){
//declare an arra
int arr[]={10,20,30,40,50};
//declare and initialise pointer
int *ptr=arr;

printf("arr[0] value: %d, memory address: %p\n",*ptr,ptr);
++ptr;
printf("arr[1] value: %d, memory address: %p\n",*ptr,ptr);
++ptr;
printf("arr[2] value: %d, memory address: %p\n",*ptr,ptr);
++ptr;
printf("arr[3] value: %d, memory address: %p\n",*ptr,ptr);
++ptr;
printf("arr[4] value: %d, memory address: %p\n",*ptr,ptr);

return 0;
}
```

Output

```arr[0] value: 10, memory address: 0x7fffb273d9f0
arr[1] value: 20, memory address: 0x7fffb273d9f4
arr[2] value: 30, memory address: 0x7fffb273d9f8
arr[3] value: 40, memory address: 0x7fffb273d9fc
arr[4] value: 50, memory address: 0x7fffb273da00
```

### Explanation

In this program, each ++ (increment) expression is adding 1 to the pointer variable (ptr) but pointer variable (ptr) is not moving 1 byte.

Why?

When we add 1 to the pointer, pointer moves sizeof(pointer_data_type) bytes.

For example - if there is an integer pointer and we add 1 into the pointer will move sizeof(int) i.e. 2 or 4 bytes (depends on the system architecture).

In this example pointer variable ptr is an integer type and the sizeof(int) is 4 hence pointer is moving 4 bytes on each ++ operation and accessing the next values from array arr.