In C, what is the output when assigning with post-increment on the same variable? #include<stdio.h> int main() { int i = 3; i = i++; printf("%d ", i); return 0; }

Difficulty: Medium

Correct Answer: 3

Explanation:

Introduction / Context:This classic C puzzle demonstrates how post-increment works when the same variable appears on both sides of the assignment. It is not undefined because there is only one modification of i in the full expression; the subtlety lies in the value produced by i++.

Given Data / Assumptions:

  • i is initialized to 3.
  • Post-increment returns the old value and then increments the variable.
  • The assignment overwrites i with the result of the right-hand side.

Concept / Approach:For i = i++, the right-hand side evaluates to the original value (3). After producing that value, i is incremented to 4 as a side effect. Then the assignment stores the produced value (3) back into i, effectively discarding the increment.

Step-by-Step Solution:Initial i = 3.Evaluate i++: result value = 3; side effect schedules i → 4 before the next sequence point.Perform assignment i = (result 3): i becomes 3 again, clobbering the incremented value.printf prints 3.

Verification / Alternative check:Most compilers yield 3 for this construct in C (and many warn about confusing code). The C standard sequencing rules allow one modification; here the behavior is well-defined.

Why Other Options Are Wrong:(b), (c), (d) assume the increment survives the assignment, which it does not.

Common Pitfalls:Confusing this with undefined cases that modify and also read a variable twice without sequencing (e.g., printf("%d, %d", ++i, ++i)). Here, there is a single modification and the assignment overwrites the post-increment's increment.

Final Answer:3

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion