jas@druxy.UUCP (12/18/83)
Re: I would have to disagree with chris as to what should be assigned by: char *in, *out, buf[]; in = buf; out = &(*in++); since he forgot the parentheses. Given the parentheses, out SHOULD be set buf+1; that is, 'in' is incremented BEFORE the & operator is applied. -- Dave Olson (fortune!olson) Dave, I believe you are mistaken. Perhaps we can finally set this question to rest by explicitly listing the order of operations when evaluating &(*in++): 1. Evaluate 'in'. 2. Increment 'in'. This is a side effect, which does not affect the evaluation of the expression &(*in++). 3. Dereference the value produced by step 1. The result is an lvalue of type char (I am using 'lvalue' as defined by Kernighan and Richie in section 5 of Appendix A of *The C Programming Language*). The value of this result is the character pointed to by 'in' before incrementing, i.e., buf[ 0 ]. 4. Take the address of the value produced by step 3. The result has type 'pointer to char' (or 'char *', if you prefer); its value is &buf[ 0 ], or buf. Step 2 seems to be the only real bone of contention. Section 7.2 of Appendix A of *The C Programming Language* states: "When postfix ++ is applied to an lvalue, the result is *the value of the object referred to by the lvalue*. *After* the result is noted, the object is incremented...." (my emphasis). I see no ambiguity in this sentence. In my opinion, this subject has now been beaten to death, so here's hoping I've just had the last word ( :-) ). -- Jim Shankland ihnp4!druxy!jas