Associativity -- what is it?
Larry Jones
scjones at sdrc.UUCP
Wed Feb 24 12:21:25 AEST 1988
In article <234 at mccc.UUCP>, pjh at mccc.UUCP (Peter J. Holsberg) writes:
> In article <224 at sdrc.UUCP> scjones at sdrc.UUCP (Larry Jones) writes:
> |In article <226 at mccc.UUCP>, pjh at mccc.UUCP (Peter J. Holsberg) writes:
> |>
> |> I find that associativity is a *very* difficult thing for me to explain,
> |> undoubtedly because I don't understand it! Would someone come to my
> |> rescue? Here's an example (assume that everything's been declared
> |> correctly):
> |>
> |> x = 3 * i ++;
> |>
> |> Book says that ++ has a higher precedence than *, and that ++
> |> associates from R->L. That makes me think that ++ should be applied
> |> first, but I know it isn't. But ????
> |
> |But ++ IS applied first! The key point here is that the RESULT of postfix
> ^^^^^^^^^^^^^^^^^
> |++ is the value BEFORE incrementation, not that postfix ++ is somehow deferred
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |until later.
>
> Well, that still leaves me confused. If i has the value 7, it is 7 that
> is added to 3, so it seems to be that the ++ *is* deferred until later.
> Also, ++ has higher precedence than +, so why is the incrementation
> delayed until after the current value of i is used?
The result of i++ is the value of i. In addition, i gets incremented. You
can think of i++ as being like inc(&i) where inc() is defined as:
int inc(ip)
int *ip;
{
int j = *i;
*i = *i + 1;
return j;
}
So, it's not the ++ operator that's defered, it's the side effect of the
incrementation. You should also be aware that the incrementation can be
defered for a long time - it may not happen until after the assignment.
That's why i = i++ + 2; has no defined value -- you don't know whether the
incrementation is done before or after the assignment.
> I think we're getting close, though. :-) Thanks for the help.
Hope this clears it up for good.
----
Larry Jones UUCP: uunet!sdrc!scjones
SDRC MAIL: 2000 Eastman Dr., Milford, OH 45150
AT&T: (513) 576-2070
"When all else fails, read the directions."
More information about the Comp.lang.c
mailing list