Given ,
size of unsigned int = 2 bytes = 16 bits
Hence magnitude of the variable 'i' lies between 0 and 216 - 1 which is 65535..
Hence after increment of 65535 , we will get 0 as the next value ..
But we have to see how the increment is going on here..
Here i = 65535 initially..
So condition
i++ != 0
works fine as it is post increment operator..But after evaluating the while condition i is incremented to 0 as explained above.Now in the body of while loop , in printf() statement , i is incremented once again , thereby causing i = 1..
So next time when the condition of while() is checked , i = 1 which is not equal to 0..And effectively in previous step we had 2 increments from 65535 to 1..
Similarly in this iteration we will have increment from 1 to 3.Likewise it will be continued ..Eventually 65533 to 65535 and then the same story continues..:)
Thus the above program leads to infinite loop..
Hence A) should be the correct answer..