Beware. *s++ and (*s)++ mean different things.
int zog[2] = { 6, 42 };
int *s;
s = zog; *s++ = 12;
/* zog is now { 12, 42 }, *s = 42 */
At the risk of showing total ignorance...( except by now I suppose a
lot of people who answer my queries are used to this !!!

)
So, s is initialized to point at the address of zog[0]. On the face of
it, 12 is assigned to zog[0], then the pointer is incremented by one
and dereferenced. This makes sense, but then I looked at P53 of K&R
and am confused. If I read this correctly, the assignment should occur
last, as it is the lowest order of precedence. Then if * and ++ are
of equal precedence ( line 2, same page) and the associativity is
right to left, why am I incorrect ( and I must be ) in saying that *s+
+ = 12 should first increment the pointer, then dereference it, then
assign 12 to that index, and give zog { 6, 12} /** wrong **/ but why?
I will leave the others for now, as I am sure the answer to this will
help with those examples.