Talk about the difference between call by reference and call by value and in C language with example?

#include <stdio.h>

// Function prototypes
void callByValue(int x, int y);
void callByReference(int x, int y);

int main() {
    int a = 5, b = 10;

    // Call by value
    printf("Before callByValue: a = %d, b = %d\n", a, b);
    callByValue(a, b);
    printf("After callByValue: a = %d, b = %d\n\n", a, b);

    // Call by reference
    printf("Before callByReference: a = %d, b = %d\n", a, b);
    callByReference(&a, &b);
    printf("After callByReference: a = %d, b = %d\n", a, b);

    return 0;
}

// Function to demonstrate call by value
void callByValue(int x, int y) {
    x = x * 2;
    y = y * 2;
    printf("Inside callByValue: x = %d, y = %d\n", x, y);
}

// Function to demonstrate call by reference
void callByReference(int x, int y) {
    x = x * 2;
    y = y * 2;
    printf("Inside callByReference: x = %d, y = %d\n", x, y);
}