743 views

What will be the output of the following program assuming that parameter passing is

1. call by value

2. call by reference

3. call by copy restore

procedure P{x, y, z};
begin
y:y+1;
z: x+x
end;
begin
a:= b:= 3;
P(a+b, a, a);
Print(a)
end.


edited | 743 views

  Call by Value : 3
  Call by Reference : 12
  Call by Copy-Restore : 12

Equivalent 'C' Code for :

  Call By Value
#include <stdio.h>
int foo(int x,int y,int z)
{
y = y+1;
z = x+x;
}
int main(void)
{
int a = 3;
int b = 3;
foo(a+b,a,a);
printf("%d",a);
return 0;
}
#include <stdio.h>
int foo(int *x,int *y,int *z)
{
*y = *y+1;
*z = *x+*x;
}
int main(void)
{
int a = 3;
int b = 3;
int c = a+b;
foo(&c,&a,&a);
printf("%d",a);
return 0;
} 
 #include <stdio.h>
void foo(int *x,int *y,int *z)
{
*y = *y+1;
*z = *x+*x;
}
int main(void)
{
int a=3;
int b=3;
int c=a+b;
int d,e;
d = c;//copy
e = a;//copy
foo(&d,&e,&e);
a = e;//restore
c = d;//restore
printf("%d",a);
return 0;
}

edited by
Aditya's call by reference program :

//Call by Reference(Call by reference is realised by passing address in C) :

#include <stdio.h>

int foo(int *x,int *y,int *z)
{
*y = *y+1;
*z = *x+*x;

}

int main(void)
{
int a = 3;
int b = 3;
int c = a+b;

foo(&c,&a,&a);
printf("%d",a);
return 0;

}

Call by copy-restore program :

//Call by Copy-restore :
#include <stdio.h>

void foo(int *x,int *y,int *z)
{
*y = *y+1;
*z = *x+*x;

}

int main(void)
{
int a=3;
int b=3;
int c=a+b;
int d,e;
d = c;//copy
e = a;//copy
foo(&d,&e,&e);
a = e;//restore
c = d;//restore
printf("%d",a);
return 0;

}

1
2