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 }

- $\text{10, 3}$
- $\text{31, 3}$
- $\text{27, 7}$
- None of the above

### 3 Comments

edited
Jul 12
by rajankakaniya

## 3 Answers

Best answer

Answer is B.

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$

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$

### 10 Comments

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.

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 *

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**.

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