text: There are two ways to pass arguments/parameters to function calls -- call by value and call by reference..
  In C, all function arguments are passed "by value" because C does not support references like C++ and Java do. In C, the calling and called functions do not share any memory -- they have their own copy and the called function cannot directly alter a variable in the calling function; it can only alter its private, temporary copy.
  The call by value scheme is an asset, however, not a liability. It usually leads to more compact programs with fewer extraneous variables, because parameters can be treated as conveniently initialized local variables in the called routine. Yet, there are some cases where we need call by reference:
  The call by value does not address above cases, hence we need call by reference. To achieve call by reference functionality in C language the calling function provides the address of the variable to be set (technically a pointer to the variable), and the called function declares the parameter to be a pointer and access the variable indirectly through it. Since the address of the argument is passed to the function, code within the called function can change the value of the actual arguments.
  While studying call by value and call by reference in C it is important to note that element of the actual array.
  The classic example of wanting to modify the caller's memory is a
  swapByValue() function which exchanges two values. For C uses call by value, the following version of swap
  swapByValue() will not work...
  #include <stdio.h> void swapByValue(int, int); /* Prototype */ int main() /* Main function */ { int n1 = 10, n2 = 20; /* actual arguments will be as it is */ swapByValue(n1, n2); printf("n1: %d, n2: %d\n", n1, n2); } void swapByValue(int a, int b) { int t; t = a; a = b; b = t; } OUTPUT ====== n1: 10, n2: 20
  The
  swapByValue() does not affect the arguments
  n1 and
  n2 in the calling function it only operates on
  a and
  b local to
  swapByValue() itself. This is a good example of how local variables behave.
  In call by reference, to pass a variable
  n as a reference parameter, the programmer must pass a pointer to
  n instead of
  n itself. The formal parameter will be a pointer to the value of interest. The calling function will need to use
  & to compute the pointer of actual parameter. The called function will need to dereference the pointer with
  * where appropriate to access the value of interest. Here is an example of a correct swap
  swapByReference() function. So, now you got the difference between call by value and call by reference!
  #include <stdio.h> void swapByReference(int*, int*); /* Prototype */ int main() /* Main function */ { int n1 = 10, n2 = 20; /* actual arguments will be altered */ swapByReference(&n1, &n2); printf("n1: %d, n2: %d\n", n1, n2); } void swapByReference(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } OUTPUT ====== n1: 20, n2: 10
  Hope you have enjoyed reading differences between call by value and call by reference methods of passing parameters to functions