pointers

emdivya03's Avatar, Join Date: Sep 2009
Newbie Member
1: main( )
2: {
3:
4: static int a[ ] = {0,1,2,3,4};
5: int *p[ ] = {a,a+1,a+2,a+3,a+4};
6: int **ptr = p;
7:
8: ptr++;
9: printf(“\n %d %d %d”, ptr-p, *ptr-a, **ptr);
10:
11: *ptr++;
12: printf(“\n %d %d %d”, ptr-p, *ptr-a, **ptr);
13:
14: *++ptr;
15: printf(“\n %d %d %d”, ptr-p, *ptr-a, **ptr);
16:
17: ++*ptr;
18: printf(“\n %d %d %d”, ptr-p, *ptr-a, **ptr);
19: }


plz explain how the *ptr++, *++ptr,++*ptr works?
Amar_Raj's Avatar, Join Date: Jun 2009
Go4Expert Member
Always remember the Precedence and the associativity of the operators: Refer the link
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
1. Increment/Decrement(both Prefix and Postfix) has higher precedence than deference(*).
2. Deference and Prefix Increment/Decrement has same precedence but the associativity is from Right to left
*ptr++: can be treated as *(ptr++)
*++ptr: can be treated as *(++ptr) as associativity is Right to left
++*ptr: can be treated as ++(*ptr) as associativity is Right to left

Sharanu,
Amar