The expression (i++, i)uses the comma operator → it first evaluates the left side, and then the right side, the result is on the right side. Since this operator also enters a sequence point, the result is correctly defined: this value iafter increasing it.
In this example, it just uselessly confuses the code because it has the same result as the record reverse(++i);(or even reverse(i + 1);that better matches the function-recursive approach).