If p is a pointer to some element of an array, then p++ increments p to point to the next element, and p+=i increments it to point i elements beyond where it currently does. These and similar constructions are the simples forms of pointer or address arithmetic. All types of arithmetic operations are not possible with pointers.

**The valid operations that can be performed using pointers are**

(i) Addition of an integer to a pointer and increment operation.

(ii) Subtraction of an integer from a ponter and decrement operation.

(iii) Subtraction of a pointer from another pointer of same type.

**The arithmetic operations that cannot be performed on pointers are as follows**

(i) Addition, multiplication and division of two pointers.

(ii) Multiplication between pointer and any number.

(iii)Division of a pointer by any number.

(iv) Addition of float or double values to pointers.

The expression p+1 yields the correct machine address for the next variable of that type. Other valid pointer expressions:

**p+i, ++p, p+=I, p-q**

where p-q represents the No of array elements between p and q. Since a pointer is just a mem address, we can add to it to traverse an array. p+1 returns a ptr to the next array element.

Precedence level of * operator and increment/decrement operators is same and their associativity is from right to left. In reality, p+1 doesn’t add 1 to the memory address, it adds the size of the array element.

Suppose p is an integer pointer and x is an integer variable. Now the main problem is to identify how the following pointer expressions given below are interpreted.

**(i)** x = *p++ is same as two expressions x = *p followed by p = p + 1.

**(ii)** x = (*p)++ is same as two expressions x = *p followed by *p = *p + 1.

**(iii)** x=*++p is same as two expressions p=p+1 followed by x=*p.

**(iv)** x=++*p is same as two expressions *p=*p+1 followed by x=*p