# Difference between pass by value and pass by reference

Passing arrays to a function:

1)int n;

2) int a[10];

• The name 'n' refers to the value stored in 'n'. So, if 'n' is passed as an argument to a function, it means passing the argument by value. Hence passing an ordinary variable refers to passing the argument by value.
• The name 'a' refers to starting address of the array. So, if 'a' is passed as an argument to a function it means passing the argument by address or reference.

## Difference between pass by value and pass by reference.

Pass by value: In pass by value, changes made to the arguments in the called function will not be reflected in the calling function.

Example:

`void modify(int a);int main(){int a=10;modify(a);printf("%d",a);    //output:10getch();return 0;}void modify(int a){a=a+10;printf("%d", a);   //output: 20}`

a is an ordinary integer variable. So, when a is passed, it is passed by value. In the modify() function, a's value is changed to 20. But the changed value is not returned to main(). Thus when a is printed in the main(), output is 10, the original value.

Pass by reference: In pass by reference, the changes made to the arguments in the called function will be reflected in the calling function.

Example:

`void modify(int array1[]);int main(){int array1[]={1,2,3};int i;modify(array1);for(i=0; i<3; i++)printf("%d", array1[i]);   //output: 11 12 13getch();return 0;}void modify(int array1[]){int i;for(i=0;i<3;i++){array1[i]+=10;printf("%d", array1[i]);     //output: 11 12 13}}`

Here, the array contents are changed to {11,12,13} in the user-defined function. But, though these values are not returned to the main(), the changes made to the array, are seen in the main(). So, when array1[] is printed in the main(), output is {11,12,13}

### Relevant exercises

POST A NEW COMMENT

• Input (stdin)

Output (stdout)

Input (stdin)

Expected Output

Compiler Message

Input (stdin)

`2    3`

`5`
`5`
`5`