Call by value and Call by reference in C
Call by value and Call by reference in C
There are two methods to pass the data into the function in C
language, i.e., call by value and call by reference.
Call by value in C
In call by value method, the value of the actual parameters is
copied into the formal parameters. In other words, we can say
that the value of the variable is used in the function call in the
call by value method.
In call by value method, we cannot modify the value of the
actual parameter by the formal parameter.
In call by value, different memory is allocated for actual and
formal parameters since the value of the actual parameter is
copied into the formal parameter.
The actual parameter is the argument which is used in the
function call whereas formal parameter is the argument which is
used in the function definition.
Example:
Swapping the values of two variables:
#include <stdio.h>
void swap(int , int); //prototype of the function
int main()
{
int a = 10;
int b = 20;
printf("Before swapping the values in main a = %d, b = %d\n",a,b);
// printing the value of a and b in main
swap(a,b);
printf("After swapping values in main a = %d, b = %d\n",a,b); // The
value of actual parameters do not change by changing the formal para
meters in call by value, a = 10, b = 20
}
void swap (int a, int b)
{
int temp;
temp = a;
a=b;
b=temp;
printf("After swapping values in function a = %d, b = %d\n",a,b); //
Formal parameters, a = 20, b = 10
}
Output
Before swapping the values in main a = 10, b = 20
After swapping values in function a = 20, b = 10
After swapping values in main a = 10, b = 20
Call by reference in C
In call by reference, the address of the variable is passed into the
function call as the actual parameter.
The value of the actual parameters can be modified by changing
the formal parameters since the address of the actual parameters is
passed.
In call by reference, the memory allocation is similar for both
formal parameters and actual parameters. All the operations in the
function are performed on the value stored at the address of the
actual parameters, and the modified value gets stored at the same
address.
Example: Swapping the values of two variables:
#include <stdio.h>
void swap(int *, int *); //prototype of the function
int main()
{
int a = 10;
int b = 20;
printf("Before swapping the values in main a = %d, b = %d\n",a,b);
// printing the value of a and b in main
swap(&a,&b);
printf("After swapping values in main a = %d, b = %d\n",a,b); // Th
e values of actual parameters do change in call by reference, a = 10, b
= 20
}
void swap (int *a, int *b)
{
int temp;
temp = *a;
*a=*b;
*b=temp;
printf("After swapping values in function a = %d, b = %d\n",*a,*b)
; // Formal parameters, a = 20, b = 10
}
Output
Before swapping the values in main a = 10, b = 20
After swapping values in function a = 20, b = 10
After swapping values in main a = 20, b = 10
1 A copy of the value is passed into the An address of value is passed into the
function function
2 Changes made inside the function are Changes made inside the function
limited to the function only. The validate outside of the function also.
values of the actual parameters do not The values of the actual parameters
change by changing the formal do change by changing the formal
parameters. parameters.
3 Actual and formal arguments are Actual and formal arguments are
created at the different memory created at the same memory location
location