i think its so: first the third %d gets a 1 value because of i++, it has a postincrement so after that i = 2. Then the second %d gets the before modified i value thats 2, and it has also a postincrement so after that i = 3. Then there is no more incrementation so the first %d is 3.
an example for a 1,2,3 would be
printf("%d %d %d",i,i--,i--);
ps.: as u see the evaluation goes from right to left... hope this helps u :)