What is difference between call by value and call by reference in function?

The arguments passed to function can be of two types namely



1. Values passed

2. Address passed



The first type refers to call by value and the second type refers to call by reference.


For instance consider program1



main()

{

int x=50, y=70;

interchange(x,y);

printf(“x=%d y=%d”,x,y);

}



interchange(x1,y1)

int x1,y1;

{

int z1;

z1=x1;

x1=y1;

y1=z1;

printf(“x1=%d y1=%d”,x1,y1);

}



Here the value to function interchange is passed by value.


Consider program2



main()

{

int x=50, y=70;

interchange(&x,&y);

printf(“x=%d y=%d”,x,y);

}



interchange(x1,y1)

int *x1,*y1;

{

int z1;

z1=*x1;

*x1=*y1;

*y1=z1;

printf(“*x=%d *y=%d”,x1,y1);

}



Here the function is called by reference. In other words address is passed by using symbol & and the value is accessed by using symbol *.


The main difference between them can be seen by analyzing the output of program1 and program2.


The output of program1 that is call by value is



x1=70 y1=50

x=50 y=70



But the output of program2 that is call by reference is



*x=70 *y=50

x=70 y=50



This is because in case of call by value the value is passed to function named as interchange and there the value got interchanged and got printed as



x1=70 y1=50



and again since no values are returned back and therefore original values of x and y as in main function namely



x=50 y=70 got printed.



But in case of call by reference address of the variable got passed and therefore what ever changes that happened in function interchange got reflected in the address location and therefore the got reflected in original function call in main also without explicit return value. So value got printed as *x=70 *y=50 and x=70 y=50

Questions by GeekAdmin   answers by GeekAdmin

Showing Answers 1 - 3 of 3 Answers

Usually there are two ways to call a function or method.1. Call By Value2. Call By ReferenceWhile calling a function by 'Call by Value', That original value can't be changedFOr Ex.add(a,b);add(int x, int y){...}In this statement, if you change the value of x, It won't affect the original value of 'a'.But, While calling a function by 'Call by Reference', That original value will be changed.That is, If you change the value of 'X' in the function method, The original value of 'a' will be changed to the value of 'x'. I am in need of your reply.

  Was this answer useful?  Yes

Give your answer:

If you think the above answer is not correct, Please select a reason and add your answer below.

 

Related Answered Questions

 

Related Open Questions