GATE CSE 2001 | Question: 2.17 | UGCNET-AUG2016-III: 21
in Programming recategorized by
6,904 views
19 votes

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
in Programming recategorized by
6.9k views

3 Comments

Why it is out of syllabus  taged ?
3
edited by

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.

@Deepakk Poonia (Dee)

0

@rajankakaniya

yes, it’s correct.

1

Subscribe to GO Classes for GATE CSE 2022

3 Answers

29 votes
 
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$
selected by

10 Comments

edited by

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  ??
5
^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.
9
@Arjun z = x + y + z ⇒ z = 3 + 14 + 14 = 31  ??? is this right order
7
Hey, actually I can't understand which line is shows that variable x points the address of variable y???
1

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.

1
in the line z=x+y+z why are we not taking x as 3, i mean to say 3+14+10=27?
1
Yes sir why not z=27 is taking
1
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).
4
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 *
0
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
0
8 votes
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.
 

edited by

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) */ ? 

0
1 vote
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
Answer:

Related questions

Ask
Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true