Answer is C).
When a floating point constant is assigned to an integer value, it gets truncated and only the integer part gets stored.
Call by Value ===> whatever happens will happen in the called activation block in the stack and when we return it will not effect actual x so value will be 5.
Call by reference ===> A reference to original memory location is passed. So, in foo, x and y are aliases of the x in main (having same memory location). So, x in main will change and final value will be 20 (5+5 and 10+10).