Hi,
CAn anyone tell me what does the following statement do in C. *p++ = val My understanding is that because ++ and * have right-associativity, it is equivalent to

p++;
*p=val;

Similarly val = *--p is equivalent to

p--;
val = *p;

Is it correct?

Hi,
CAn anyone tell me what does the following statement do in C. *p++ = val

*p is assigned the value of val and then p is incremented.

My understanding is that because ++ and * have right-associativity

Associativity? I don't even think you got that right if you were trying to say precedence.

Similarly val = *--p

p is decremented and then val is assigned the value of *p .

Associativity? I don't even think you got that right if you were trying to say precedence.

Isn't the precedence of * and ++ same, that's why we look for the associativity in *p++ whcih is right to left.

>Associativity? I don't even think you got that right if you were trying to say precedence.
Nope. He got it right, but came to the wrong conclusion. ++ and * (dereference) have the same precedence but are right associative, so ++ is indeed performed first. However, one can't forget that the postfix increment operator evaluates to the value prior to the increment, and the increment itself is a side effect. Thus the expression *p++ = val; is equivalent to:

*p = val;
++p;

This can easily be verified by using the prefix increment in the same order. *++p = val; is equivalent to:

++p;
*p = val;

Perhaps it was just the chart I was looking at the showed postfix at higher precedence than prefix.

Isn't this another case were we should not depend in the order of precedence between sequence points?

This article has been dead for over six months. Start a new discussion instead.