The Gateway to Computer Science Excellence
+22 votes

Consider the following pseudo-code (all data items are of type integer): 

procedure P(a, b, c);
    a := 2;
    c := a + b;
end {P}

    x := 1;
    y := 5;
    z := 100;
    P(x, x*y, z);
    Write ('x = ', x, 'z = ', z);

Determine its output, if the parameters are passed to the Procedure P by

  1. value
  2. reference
  3. name
in Compiler Design by
edited by | 1.2k views

Note that pass by name is similar to pass by reference in the sense that by substituting the actual parameters into the function body, the function body can both read and write the given parameters. 


3 Answers

+33 votes
Best answer
  1. Pass by value: Function cannot modify a variable in the calling function. So, 
    $x = 1, z = 100$
  2. Pass by reference: An alias of the variable (a different name but having same memory location) is used to pass the variable to a function. So, whatever change occurs for the variable in the called function is reflected in the calling function.
    $x = 2, z = 7 (2 + 5)$
  3. Pass by name: The expression used to call a function is copy pasted for each formal parameter. So, the body of P becomes,
    $x := 2;$
    $z := x + x*y;$

    So, printed value will be 
    $x = 2, z = 12$
edited by

@arjun sir,

for call by reference here:

how address of x*y will pass to b in procedure P(a, b, c)??

x*y will be stored in a temporary and reference to that memory will be passed.
 Write ('x = ', x, 'z = ', z); ... sir can you plz explain this line as i am not getting it .. what is meant by 'x = ' ?? and why two value not 4 ?
nice explanation @Arjun sir

if call by need was also asked;

then output would be 2,7 only, am i right??



Then I think this ques answer is wrong for Call By Name

+5 votes


+2 votes
A) 1) 1,100       2) 2,7    3) 2,12

B)  1) 5,10    2) 1,2

Related questions

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
52,345 questions
60,511 answers
95,354 users