f(i,&i,i); --> f(int a,int *b,int &c);
$'a'$ gets the copy of the variable passed
$'b'$ points to the variable passed to it i.e. to $i$
$\&c$ passing $i$ by reference
a = 1; //updates the value of the copy of i, original i is unaffected
*b = 2; //updates the original i i.e i = 2;
c = 3; //updates the original i i.e. i=3;
..
cout<<i;
This will print $i=3$. So, $S1$ is true
f(a) = 5;
$f(a)$ calls the function $f$
double &f(double &d){
d=4;
return b;
}
This function takes a reference variable as a parameter, updates it's value to $4$ i.e. $a=4$ and returns a reference to $double\,b$
f(a)=5; //updates the value of b i.e b = 5
cout<<a<<":"<<b; //prints 4 : 5
So, $S2$ should be false
So, $A$ should be the answer.
Correct me if I'm wrong.