#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
}