Arguments passing in C | Call by value in C | Call by reference in C
Arguments can be passed to a function in two ways:
- Call by value
- Call by reference
Call by Value in C Language
In this method, values of actual arguments get copied to formal arguments one to one basis. Changes made to formal arguments have no effect on the actual arguments.
Program to demonstrate the use of call by value in C Language |
#include<stdio.h> void display(int a,int b) { a--; b++; printf("\n%d,%d",a,b); } int main() { int p=10,q=8; printf("\n%d,%d",p,q); display(p,q); printf("\n%d,%d",p,q); return(0); } |
Output |
10,8 9,9 10,8 |
Description |
Values of variables p and q are passed as actual arguments to the function display().
Value of p is copied to a and value of q is copied to b. a is decremented and b is incremented by 1 inside the function. On displaying values of p and q after function call statement, it is seen that changes made to a and b have no effect on the values of p and q . |
Call by reference in C Language
In this method, addresses of actual arguments are stored in formal arguments. Changes made to the formal arguments have direct effect on actual arguments. In this method, address is passed by using symbol & and the value is accessed by using symbol *.
Program to demonstrate the use of call by reference in C Language |
#include<stdio.h> void display(int *a,int *b) { (*a)–; (*b)++; printf(“\n%d,%d”,a,b); } int main() { int p=10,q=8; printf(“\n%d,%d”,p,q); display(&p,&q); printf(“\n%d,%d”,p,q); return(0); } |
Output |
10,8 9,9 9,9 |
Description |
In the above program, values of p and q are passed as actual arguments to the function display().
Address of variable p is stored in a and address of q is stored in b. *a is incremented and *b is decremented by 1 . On displaying values of p and q after function call statement, it is seen that changes made to a and b have direct effect on the values of p and q i.e. value of *a is transferred to p and value of *b is transferred to q. |
Difference between Call by value and call by reference in C Language
Call by Value | Call by Reference |
1. Actual arguments are copied to formal arguments one to one basis. | 1. Addresses of actual arguments are stored in formal argument on one to one basis. |
2. Changed made to formal arguments have no effect on actual arguments. | 2. Changes made to formal arguments have direct effect on actual arguments. |
3. Only one value can be returned from function. | 3. More than one value can be returned by the function. |
4. Actual arguments and formal arguments are stored at different memory locations. | 4. Actual arguments and formal arguments share same memory locations. |
Passing Array as function argument in C Language
Just like normal variables, we can also pass arrays as function arguments. While passing an array as an actual argument, we need not to write any subscript or specify any size with array name.
i. Passing one dimensional array as function argument in C Language
In case of one dimensional array, we need to write the name of one dimensional array within the parenthesis of calling function which is to be passed as actual argument. There is no need to write any subscript or any size with array name while passing it as actual argument but in formal argument, we need to write pair of square brackets.
Program to pass a one dimensional array as function argument in C Language.
|
#include<stdio.h> void display(int a[]) { int i; printf("\nArray elements are: "); for(i=0;i<4;i++) printf("\n%d",a[i]); } int main() { int x[4]={1,3,5,7}; display(x); return(0); } |
Output |
Array elements are: 1 3 5 7 |
Description |
In the above program, array x is passed as actual argument to the function display().
Address of array x is stored in array a All values stored in array x get transferred to array a. Elements of array are displayed with the help of for statement. |
ii. Passing a two dimensional array as function argument in C Language
In case of two dimensional array, we need to write the name of two dimensional array which is to be passed as actual argument. There is no need to write any subscript or any size with array name while passing it as actual argument. whereas in the formal argument, we need to write the name of array followed by two pairs of square brackets. first pair of square brackets may or may not contain any size but second pair must contain some size .
Program to pass a two dimensional array as function argument in C language.
|
#include<stdio.h> void show(int a[][2],int m,int n) { int i,j; printf("\nMatrix within function is: "); for(i=0;i<m;i++) { printf("\n"); for(j=0;j<n;j++) { printf("\t%d",a[i][j]); } } } int main() { int P[2][2]={5,7,9,11}; show(P, 2,2); return(0); } |
Output |
Matrix within function is: 5 7 9 11 |
Description |
In the above program, two dimensional array P is passed as actual argument to the function show().
Address of array P is stored in array a. m gets 2 and n gets 2 from actual arguments. All values stored in two dimensional array P get transferred to array a. Elements of array are displayed. |