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
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
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
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
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
Difference between call by value and call by reference
Reviewed by Mursal Zheker
on
Senin, Oktober 07, 2013
Rating:
Tidak ada komentar: