In the main(), this line
i = i++ + f1(i);
will become
i = 0 + f1(1);
The i++ is post incrementing thus become zero for the assignment.
It it were pre incrementing as ++i then it would become one (i = ++i + f1(i); becomes i = 1 + f1(1)
The f1(i) is a new phrase of the assignment and takes the current value of i, now incremented to 1. If you output i in f1() you will see this.
[ June 13, 2008: Message edited by: Paul Fairhurst ]