Difference Between Call by Value and Call by Reference in C

Functions can be invoked in two ways: Call by Value or Call by Reference . These two ways are generally differentiated by the type of values passed to them as parameters.

The parameters passed to the function are called actual parameters whereas the parameters received by the function are called formal parameters.

Call By Value in C

In call by value method of parameter passing, the values of actual parameters are copied to the function’s formal parameters.

Example of Call by Value

The following example demonstrates the call-by-value method of parameter passing


Output
Inside Function: x = 20 y = 10 In the Caller: a = 10 b = 20

Thus actual values of a and b remain unchanged even after exchanging the values of x and y in the function.

Call by Reference in C

In call by reference method of parameter passing, the address of the actual parameters is passed to the function as the formal parameters. In C, we use pointers to achieve call-by-reference.

Example of Call by Reference

The following C program is an example of a call-by-reference method.


Output
Inside the Function: x = 20 y = 10 Inside the Caller: a = 20 b = 10

Thus actual values of a and b get changed after exchanging values of x and y.

Difference between the Call by Value and Call by Reference in C

The following table lists the differences between the call-by-value and call-by-reference methods of parameter passing.

Call By Reference

Note In C, we use pointers to achieve call-by-reference. In C++, we can either use pointers or references for pass-by-reference. In Java, primitive types are passed as values and non-primitive types are always references .

Conclusion

In conclusion, Call by Value means passing values as copies to the function, so that the original data is preserved and any changes made inside the function are not reflected in the original data, whereas Call by Reference means passing references to the memory locations of variables (in C we pass pointers to achieve call by reference), hence changes made inside the function are directly modified in the original values. The choice between the two completely depends on the particular requirements and considerations of a program.