This blog is under construction

Monday 7 October 2013

Difference between call by value and call by reference

Difference between pass by value and pass by reference

First Difference:
Call by value:  Value of the variable is passed as argument
Call by reference:  Address of the variable is passed as argument


  /* call by value vs call by reference */
  #include <stdio.h>

  void callByVal(int num) {
        num = 100;
        return;
  }

  void callByRef(int *num) {
        *num = 200;
        return;
  }

  int main() {
        int num = 10;
        printf("Call by value:\n");
        printf("Value of num before function call: %d\n", num);

        /* passing the value of the variable as argument */
        callByVal(num);

        printf("Value of num after function call: %d\n", num);
        printf("Call by reference:\n");
        printf("Value of num before function call: %d\n", num);

        /* passing address of the variable as argument */
        callByRef(&num);

        printf("Value of num after function call: %d\n", num);
        return 0;
  }



  Output:
  jp@jp-VirtualBox:~/$ ./a.out
  Call by value:
  Value of num before function call: 10
  Value of num after function call: 10
  Call by reference:
  Value of num before function call: 10
  Value of num after function call: 200



Second Difference:
Call by value: Any change to the value of the argument in called function is not carried out to the calling function.
Call by reference:  Any change to the value of the argument in called function is carried out to the calling function.


  /* pass by value vs pass by reference */
  #include <stdio.h>

  void callByVal(int val) {
        /* trying to change the value of the argument */
        val = val + 10;
        return;
  }

  void callByRef(int *val) {
        /* changing the value of the argument */
        *val = *val + 10;
        return;
  }

  int main() {
        int val = 10;
        printf("Call by value:\n");
        printf("Value of val before function call: %d\n", val);

        /* passing the value of the valiable as argument */
        callByVal(val);

        /* call by value - value of val is not changed */
        printf("Value of val after function call: %d\n", val);

        printf("Call by reference:\n");
        printf("Value of val before function call: %d\n", val);

        /* passing address of the valiable as argument */
        callByRef(&val);

        /* call by reference - value of val is changed */
        printf("Value of val after function call: %d\n", val);
        return 0;
  }



  Output:
  jp@jp-VirtualBox:~/$ ./a.out
  Call by value:
  Value of val before function call: 10
  Value of val after function call: 10
  Call by reference:
  Value of val before function call: 10
  Value of val after function call: 20


Third Difference:
Call by value: Memory occupied by actual and formal arguments are different.
Call by reference: Memory occupied by actual and formal arguments are same.


  /* call by value vs call by reference */
  #include <stdio.h>

  void callByVal(int val) {
        /* memory location of formal argument */
        printf("Address inside called function:\n");
        printf("Address of val: 0x%x\n", (int)&val);
        return;
  }

  void callByRef(int *val) {
        int tmp;
        /* memory location of formal argument */
        printf("Address inside called function:\n");
        printf("Pointer value of val: 0x%x\n", (int)val);
        return;
  }

  int main() {
        int val = 10;

        printf("\nCall by Value:\n");
        /* memory location of actual argument */
        printf("Address of the variables inside calling function:\n");
        printf("Address of val: 0x%x\n", (int)&val);
        callByVal(val);

        printf("\nCall by reference:\n");
        /* memory location of actual argument */
        printf("Address of the variables inside calling function:\n");
        printf("Address of val: 0x%x\n", (int)&val);
        callByRef(&val);

        return 0;

  }



  Output:
  jp@jp-VirtualBox:~/$ ./a.out
  Call by Value:
  Address of the variables inside calling function:
  Address of val: 0xbfed0e0c
  Address inside called function:
  Address of val: 0xbfed0df0

  Call by reference:
  Address of the variables inside calling function:
  Address of val: 0xbfed0e0c
  Address inside called function:
  Pointer value of val: 0xbfed0e0c


1 comment:

  1. Dell Laptop Repair Center in Noida is no.1 service center which provides door to door services in or its nearby areas. We have expert, technicians who can repair your laptop at your home. . Call us: 9891868324

    ReplyDelete