c - Postfix before prefix? -
i have read in here , in here postfix(es) prior prefix(es).
int = 5; int b = 5; printf("%d\n",a++); printf("%d\n",++b); but code output 5,6. how make sense then?
what talked in links operator precedence. not affect working of post increment. post increment operator increases value after expression in calculated.
post-increment operator used increment value of variable after executing expression in post increment used.
what means if have statement
int = 0 , j = 5 , k ; k = ++i + j++ ; the ++i calculated ( i becomes 1 ) , expression calculated, , k gets value 6 , , after assigning value 6 k, effect of j++ comes place , j becomes 6.
operator precedence determines how operators grouped, when different operators appear close in 1 expression. example, ' * ' has higher precedence ' + '. thus, expression + b * c means multiply b , c , , add product (i.e., + (b * c) ).
but precedence not change working of postfix increment. increase value after expression calculated ( part independent of it's precedence ) .
i'll give simple example ( hope know using pointers )
#include<stdio.h> int main() { int a[] = { 11, 22 }; int x; int *p = a; x = *p++; printf( " *p = %d\n",*p ); printf( " x = %d",x ); } the output is
*p = 22 x = 11 you can refer ideone link proof.
now lets explain that. ++ has higher precedence * , code same as
x = * ( p++ ); that is, ++ will make pointer p point next address of array , part done after expression calculated ( in other words, after value of *p assigned x ) . after expression, p point next address, have value 22 while x still value 11.
hope makes clear ( example might bit hard understand, it's 1 of best understand )
Comments
Post a Comment