#include
int main()
{
int a[2]={10,4};
int *k;
int *j;
j=a;
k=j;
printf(\"j=%d,k=%d\\n\\n\",*j,*k);
*j++;
++*k;
prin
You have two things going on here:
The different semantics between prefix and postfix ++
;
Different precedence of prefix and postfix operators.
Postfix operators have higher precedence than unary (prefix) operators, so the expression *p++
is parsed as *(p++)
- you're applying the *
operator to the result of p++
. By contrast, the prefix ++
operator and unary *
have the same precedence, so the expression ++*p
is parsed as ++(*p)
- you're applying the ++
operator to the result of *p
.
Also remember that prefix and postfix ++
have slightly different behavior. Both increment their operand as a side effect, but the result of postfix ++
is the current value of the operand, while the result of prefix ++
is the value of the operand plus 1.