Once a reference variable has been defined to refer to a particular variable it can refer to any other variable in C plus plus?
No. References are bound at initialization and cannot be re-bound. After initialization, a reference is just an alias for the object it is bound to - and references must always be initialized.
In other words, whatever you do on the reference is done on the object being referenced. Here, for instance:
int &r3 = r1;
You are binding r3 to r1, so r3 will be an alias for r1 (like an alternative name). This means that the subsequent assignment:
r3 = r2;
Does not re-bind r3 to refer to r2: instead, it ends up assigning r2 to r1. Knowing this, you should be able to figure out the behavior of the rest of your program.
r3 = r2;is assigning value of r2 to r3 not the reference. So they still point to different memory locations but with same values after this statement.