written 8.3 years ago by |
Call by value
In call by value mechanism, the called function creates a new set of variables in stack and copies the values of the arguments into them. Example: Program showing the Call by Value mechanism.
Call by value source code
1
2 void swap(int x, int y)
3 {
4 int z;
5 z = x;
6 x = y;
7 y = z;
8 printf("Swapped values are a = %d and b = %d", x, y);
9 }
10
11 int main (int argc, char *argv[])
12 {
13 int a = 7, b = 4;
14 printf("Original values are a = %d and b = %d", a, b);
15 swap(a, b);
16 printf("The values after swap are a = %d and b = %d", a, b);
17 }
Output
- Original Values are a = 7 and b = 4
- Swapped values are a = 4 and b = 7
- The values after swap are a = 7 and b = 4
This happens because when function swap() is invoked, the values of a and b gets copied onto x and y. The function actually swaps x and y while the values of the original variables a and b remain intact. oint to note is x and y are in stack. Value of a and b will be copied to x and y. Inside swap() value of x and y will be interchanged but it will not affect a and b in the main(). Please note a and b are located at the context of main() whereas x and y located at thecontext of swap(). When swap() function returns, this context of x and y will be lost and it will again come back to the context of a and b.
Call by reference
In call by reference mechanism, instead of passing values to the function being called, references/pointers to the original variables are passed. Example: Program interchange values of two variables by call by reference mechanism.
Call by reference source code
1
2 void swap(int *x, int *y)
3 {
4 int z;
5 z = *x;
6 *x = *y;
7 *y = z;
8 printf("Swapped values are a = %d and b = %d", *x, *y);
9 }
10 int main (int argc, char *argv[])
11 {
12 int a = 7, b = 4;
13 printf("Original values are a = %d and b = %d", a, b);
14 swap(&a, &b);
15 printf("The values after swap are a = %d and b = %d", a, b);
16 }
Output
1 Original Values are a = 7 and b = 4
2 Swapped values are a = 4 and b = 7
3 The values after swap are a = 4 and b = 7
This happens because when function swap() is invoked, it creates a reference for the first incoming integer a in x and the second incoming integer b in y. Hence the values of the original variables are swapped.