Function call by value is the default way of calling a function in C programming. Before we discuss function call by value, lets understand the terminologies that we will use while explaining this:
Actual parameters: The parameters that appear in function calls.
Formal parameters: The parameters that appear in function declarations.
For example:
#include <stdio.h> int sum(int a, int b) { int c=a+b; return c; } int main( { int var1 =10; int var2 = 20; int var3 = sum(var1, var2); printf("%d", var3); return 0; }
In the above example variable a and b are the formal parameters (or formal arguments). Variable var1 and var2 are the actual arguments (or actual parameters). The actual parameters can also be the values. Like sum(10, 20), here 10 and 20 are actual parameters.
In this guide, we will discuss function call by value. If you want to read call by reference method then refer this guide: function call by reference.
Lets get back to the point.
What is Function Call By value?
When we pass the actual parameters while calling a function then this is known as function call by value. In this case the values of actual parameters are copied to the formal parameters. Thus operations performed on the formal parameters don’t reflect in the actual parameters.
Example of Function call by Value
As mentioned above, in the call by value the actual arguments are copied to the formal arguments, hence any operation performed by function on arguments doesn’t affect actual parameters. Lets take an example to understand this:
#include <stdio.h> int increment(int var) { var = var+1; return var; } int main() { int num1=20; int num2 = increment(num1); printf("num1 value is: %d", num1); printf("\nnum2 value is: %d", num2); return 0; }
Output:
num1 value is: 20 num2 value is: 21
Explanation
We passed the variable num1 while calling the method, but since we are calling the function using call by value method, only the value of num1 is copied to the formal parameter var. Thus change made to the var doesn’t reflect in the num1.
Example 2: Swapping numbers using Function Call by Value
#include <stdio.h> void swapnum( int var1, int var2 ) { int tempnum ; /*Copying var1 value into temporary variable */ tempnum = var1 ; /* Copying var2 value into var1*/ var1 = var2 ; /*Copying temporary variable value into var2 */ var2 = tempnum ; } int main( ) { int num1 = 35, num2 = 45 ; printf("Before swapping: %d, %d", num1, num2); /*calling swap function*/ swapnum(num1, num2); printf("\nAfter swapping: %d, %d", num1, num2); }
Output:
Before swapping: 35, 45 After swapping: 35, 45
Why variables remain unchanged even after the swap?
The reason is same – function is called by value for num1 & num2. So actually var1 and var2 gets swapped (not num1 & num2). As in call by value actual parameters are just copied into the formal parameters.
arvind says
c is the case sensitive language
Vibhuti says
First time in my life,i got this concept. Thank you so much for explaining it with such grasping examples.