Call by Value and Call by Reference in c++ with Example

Call by Value:

Call by Value is a method of passing arguments that are used to a function and copies the actual value of an argument into the formal parameter of the function. In this case, changes made to the parameter inside the function have no effect on the argument. By default, C++ uses call by value to pass arguments.
Example:

#include<iostream.h>
#include<conio.h>
void swap(int x, int y)
{
 int temp;
 temp=x;
 x=y;
 y=temp;
}

void main() 
{  
 int x=25, y=50;  
 clrscr();  
 swap(x, y);   // passing value to function
 cout<<"The Value of x: "<<x;
 cout<<"The Value of y: "<<y;
 getch();  
}  

Output:

The Value of x: 50
The Value of y: 25

Call by Reference:

In C++, it permits us to pass parameters to the function by reference. When we pass the arguments by reference, the formal arguments in the called function become aliases to the actual arguments in the calling function that means when the function is working with its own arguments.

void swap(int *a, int *b)
{
 int n;
n=*a;           // assign the value at the address a to n //
*a=*b;
*b=n;
}
swap(&x, &y);   // call by passing //

Example:

#include<iostream.h>
#include<conio.h>
void swap(int *x, int *y)
{
 int temp;
 temp=*x;
 *x=*y;
 *y=temp;
}

void main() 
{  
 int x=25, y=50;  
 clrscr();  
 swap(&a, &b);  // passing value to function
 cout<<"The Value of x:"<<x;
 cout<<"The Value of y:"<<y;
 getch();  
}  

Output:

The Value of x: 50
The Value of y: 25

We can Difference between Call by Value and Call by Reference given below:




Call by Value Call by Reference
1. It is a usual method to call a function in which only the value of the variable is passed as an argument. 1. In this method, the address of the variable is passed as an argument.
2. Memory location occupied by formal and actual arguments is different. 2. Memory location occupied by formal and actual arguments is same.
3. Any alteration in the value of the argument passed is local to the function and it's not accepted in the calling program. 3. Any alteration in the value of the argument passed is local to the function and it is accepted in the calling program.
4. This method is slow.4. This method is fast.
5. There is no possibility of wrong data manipulation because the arguments are directly used in an expression. 5. There is a possibility of wrong data manipulation because the addresses are directly used in an expression.