#include<stdio.h>
void modify(int p, int* q, int* r);
int main() {
int a = 1;
int b = 2;
int x = 3;
int* c = &x;
printf("a = %d, b = %d, *c = %d\n", a
, b
, *c
);
modify(a, &b, c); // a is passed by value, b is passed by reference by creating a pointer (call by value),
// c is a pointer passed by value
// b and x are changed
printf("a = %d, b = %d, *c = %d\n", a
, b
, *c
);
return 0;
}
void modify(int p, int* q, int* r)
{
p = 25; // passed by value: only the local parameter is modified
*q = 26; // passed by value or reference, check call site to determine which
*r = 27; // passed by value or reference, check call site to determine which
}
I2luY2x1ZGU8c3RkaW8uaD4KCnZvaWQgbW9kaWZ5KGludCBwLCBpbnQqIHEsIGludCogcik7CgppbnQgbWFpbigpIHsKICAgIGludCBhID0gMTsKICAgIGludCBiID0gMjsKICAgIGludCB4ID0gMzsKICAgIGludCogYyA9ICZ4OwoKICAgIHByaW50ZigiYSA9ICVkLCBiID0gJWQsICpjID0gJWRcbiIsIGEsIGIsICpjKTsKCiAgICBtb2RpZnkoYSwgJmIsIGMpOyAvLyBhIGlzIHBhc3NlZCBieSB2YWx1ZSwgYiBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIGJ5IGNyZWF0aW5nIGEgcG9pbnRlciAoY2FsbCBieSB2YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgLy8gYyBpcyBhIHBvaW50ZXIgcGFzc2VkIGJ5IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgLy8gYiBhbmQgeCBhcmUgY2hhbmdlZAogICAgcHJpbnRmKCJhID0gJWQsIGIgPSAlZCwgKmMgPSAlZFxuIiwgYSwgYiwgKmMpOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIG1vZGlmeShpbnQgcCwgaW50KiBxLCBpbnQqIHIpCnsKICAgIHAgPSAyNTsgLy8gcGFzc2VkIGJ5IHZhbHVlOiBvbmx5IHRoZSBsb2NhbCBwYXJhbWV0ZXIgaXMgbW9kaWZpZWQKICAgICpxID0gMjY7IC8vIHBhc3NlZCBieSB2YWx1ZSBvciByZWZlcmVuY2UsIGNoZWNrIGNhbGwgc2l0ZSB0byBkZXRlcm1pbmUgd2hpY2gKICAgICpyID0gMjc7IC8vIHBhc3NlZCBieSB2YWx1ZSBvciByZWZlcmVuY2UsIGNoZWNrIGNhbGwgc2l0ZSB0byBkZXRlcm1pbmUgd2hpY2gKfQ==