6,904 views

What is printed by the print statements in the program $P1$ assuming call by reference parameter passing?

Program P1()
{
x = 10;
y = 3;
func1(y,x,x);
print x;
print y;
}

func1(x,y,z)
{
y = y + 4;
z = x + y + z
}
1. $\text{10, 3}$
2. $\text{31, 3}$
3. $\text{27, 7}$
4. None of the above

Why it is out of syllabus  taged ?
edited

For call by value answer is A) 10,3

For call by name answer is B) 31,3 (same as call by reference).

For call by need answer is B) 31,3

Is this correct ? Please, someone verify once.

yes, it’s correct.

### Subscribe to GO Classes for GATE CSE 2022

Here, variable $x$ of func1 points to address of variable $y.$

and variables $y$ and $z$ of func1 points to address of variable $x.$

Therefore, $y=y+4 \implies y=10+4 = 14$

and $z=x+y+z \implies z=14+14+3=31$

$z$ will be stored back in $x.$  Hence, $x=31$ and $y$ will remain as it is. $(y=3)$

Answer is $31, 3$
by

edited

should it look like ??

Program P1()
{
x = 10;
y = 3;
func1(&y,&x,&x)
print x;
print y;
}

func1(*x,*y,*z)
{
* y = *y + 4;
*z = *x +* y +* z
}

AS IT IS CALL BY REFERRENCE  ??

^Yes, the result should be same - but change to func1(&y, &x, &x);

But in theory you are using call by value- and the value being a pointer. Using '*' operator this is making the effect of call-by-reference.
@Arjun z = x + y + z ⇒ z = 3 + 14 + 14 = 31  ??? is this right order
Hey, actually I can't understand which line is shows that variable x points the address of variable y???

In Program P1() where function has been called, the order is func1(y,x,x)}but in function definition it's func1(x,y,z). The order of x and y has been changed keeping the parameter names similar. Since parameter names could be anything inside function definition, x is pointing to address of y, y and z both are pointing to address of x.

in the line z=x+y+z why are we not taking x as 3, i mean to say 3+14+10=27?
Yes sir why not z=27 is taking
Since it is call by reference, so y and z both will point to x. The "y=y+4" statement changes the value of y to 14 and and hence now y and z both will point to x having value 14. Therefore we have to take y and z value as 14 in func1(x,y,z).
sir why there are not using func1(&y,&x,&x) in function call and * to access data from address , it might be possible tha it is just triciy question , becuse just mentioning that it is call by refrance and not using this structure will make little bit confiusion so could you please help us ...why they havent use & and *
void swap(int a , int b)

{
int temp;

temp=a;

a=b;

b=temp;

}

this is the question from gate2004 ans answer was that swap function can not used because its pass by value so the point is how we can differentiate the question without structure
Program P1()
{
x = 10;
y = 3;
func1(y,x,x);
print x;
print y;
}

/* It's the call by reference. */

/* So func1(x,y,z)'s parameters x, y, z will respectively contain */
/* the address of the original parameters */

/* It means calling func1(y,x,x), */
/* the parameter x contains y, y contains x and z contains x. */

func1(x,y,z) /*  (y,x,x) = (10,3,3)  */
{
y = y + 4;   /* x = x + 4  */
/*   = 10 + 4 */
/*   = 14     */

z = x + y + z   /* x = y + x + x   */
/*   = 3 + 14 + 14 */
/*   = 31          */
}

/* Here the value of y is unaffected. */
/* Just the value of x is changed. */

$\therefore$ It's $x=31, y = 3$ as the final output.

So the correct answer is B.

### 1 comment

1. func1(x,y,z) /* (y,x,x) = (10,3,3) */

Should’nt it be func1(x,y,z) /*(y,x,x) = (3,10,10) */ ?

z=x+y+z;  here z=3+14+14; is the right order so z=31 since func1(y,x,x) is the function call and both y and z in function definition func1(x,y,z) , point to x and x

And x point to y and in this function definition there is no change in x value means in value of y because here x point to y and there ,in function definition func1(x,y,z), is no equation for change in x, it is only contain y and z change.

i.e. func1(x,y,z)

{ y=y+4; so y=10+4;

z=x+y+z; so z=3+14+14;

}

So finally in Program P1()

print x; 31

print y; 3