Functions
Pass By Value
C passes function arguments by value, so a parameter receives a copy.
copy
Changing a parameter does not change the caller's variable.
argument
The argument value is copied into the parameter when the function is called.
Pass By Value
pass_by_value.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
void addOne(int value) {
value++;
printf("inside=%d\n", value);
}
int main(void) {
int original = 3;
addOne(original);
printf("after=%d\n", original);
return 0;
}
#include <stdio.h>
void addOne(int value) {
value++;
printf("inside=%d\n", value);
}
int main(void) {
int original = 7;
addOne(original);
printf("after=%d\n", original);
return 0;
}
#include <stdio.h>
void addOne(int value) {
value++;
printf("inside=%d\n", value);
}
int main(void) {
int original = 10;
addOne(original);
printf("after=%d\n", original);
return 0;
}
original ← 3
8int main(void) {9 int original→ 3 = 3; //@original=7, 101011 addOne(original3);12 printf("after=%d\n", original);value ← 4
3void addOne(int value3) {4 value→ 4++;5 printf("inside=%d\n", value4);6}outputinside=4addOne(original);
11 addOne(original3);12 printf("after=%d\n", original3);13 return 0;14}outputafter=3
original ← 7
8int main(void) {9 int original→ 7 = 7;1011 addOne(original7);12 printf("after=%d\n", original);value ← 8
3void addOne(int value7) {4 value→ 8++;5 printf("inside=%d\n", value8);6}outputinside=8addOne(original);
11 addOne(original7);12 printf("after=%d\n", original7);13 return 0;14}outputafter=7
original ← 10
8int main(void) {9 int original→ 10 = 10;1011 addOne(original10);12 printf("after=%d\n", original);value ← 11
3void addOne(int value10) {4 value→ 11++;5 printf("inside=%d\n", value11);6}outputinside=11addOne(original);
11 addOne(original10);12 printf("after=%d\n", original10);13 return 0;14}outputafter=10
Follow the Copy
originalstarts as3.addOne(original)copies3into the parameter namedvalue.- Inside the function, the copy becomes
4. - The function prints
inside=4. - Back in
main,originalis still3, so it printsafter=3. | place | variable | value | | --- | --- | --- | | caller before call |original| 3 | | inside function | copiedvalue| 4 | | caller after call |original| 3 |
Exercise: pass_by_value.c
Reproduce inside=4 and after=3, then use the pinned original variants 7 and 10 to predict inside=8 after=7 and inside=11 after=10.