You can pass the data into a function in the C language by two methods, i.e., call by value and call by reference.
What is the call by value in C?
In this method, the actual parameters are copied into the formal parameters. It means that the function call uses the value of the variable in the call by value method. Since the actual parameter value is copied into the formal parameter, a separate memory is allotted for actual and formal parameters. The argument for function definition is the formal parameter. And the argument for a function call is the actual parameter.
Call by value means calling a function by making a copy of the argument variable. It means that the original value remains unaffected after the function is completed. The data is preserved by using this method because it doesn’t change the original variable. It never affects the actual contents of the actual arguments whenever a function is called in this call by the value method. Any changes made in the formal argument do not affect the real cases because the value of actual arguments is passed to the formal arguments.
But there are few disadvantages of using this method. Corresponding argument variables are modified while doing some changes to the actual parameters. Arguments must be variables in the call by reference. Arguments in this method can be complex expressions. This method makes two copies for the same variable, which is not suitable for memory efficiency.
What is call by reference in C?
In this method, the address of the variable is passed into the function call as the actual parameter. The user can alter the value of actual parameters by altering the formal parameters. It’s because the address of the actual parameters passed. Formal parameters and actual parameters share the exact memory location. The value store at the address of the actual parameters where all the operations in the function performed. The modified value save at the same address.
Call by reference means calling a function by giving it the reference (address) of the variable. It means the original copy utilize whenever the function works with the variable. The most useful function of call-by-reference is that it can change the value of the argument. Unlike call-by-value, it does not duplicate data for storing the same variable. Hence it is memory efficient. No copies of the arguments offered in this method. That means it can process faster. It aids in avoiding the changes performed by a blunder. The reader of the code cannot modify the value of the function.
However, there are some drawbacks to this method too. The firm non-null guarantee is the major drawback of this function. A function has to make sure that the input is non-null before taking in a reference. This means that there is no need for a null check. The function not acknowledged as pure because of its passing by references technique. While working, lambdas and multi-threaded programs become a threat because the lifetime guarantee is a big issue with references.
What are the differences between call by value and call by reference?
Let’s have a look at the differences between Call by Value and Call by reference.
- In the call by value, a copy of the value passed into the function, whereas an address of value passed into the function in the call by reference.
- The original value not modified in the Call by value method. However, the original value modified in the call by the reference method.
- The programming languages like C++, PHP, Visual Basic NET, and C# uses the Call by value method by default. On the other hand, Call by reference supported by Java language only.
- In the call by value, the modifications made inside the function confined to the function only. The content of the actual parameters will not vary by changing the formal parameters. In contrast, the changes made inside the function in a call-by-reference certify outside the function. The contents of the actual parameters differentiate by altering the formal parameters.
- Actual and formal arguments actualized at the separate memory locations in a call by value. But both actual and formal arguments generated at the exact memory location in the call by reference.
So collectively, today, we got to know that functions can invoked in two ways. These Call by Value and Call by Reference. They differ from each other by the type of values passed to them as parameters. Actual parameters the parameters passed to the function. In contrast, formal parameters the parameters received by the function.
Also read: Difference between breathing and respiration