Possible solutions

Content

Modify a variable indirectly

int
printf(const char *, ...);

int
main()
{
    int  i = 3;
    int *j = &i;

    printf("i=%d\n", i);
    printf("j=%p\n", (void*)j);

    *j  = 5;

    printf("i=%d\n", i);

    printf("sizeof(i) = %zu, sizeof(int)   = %zu\n", sizeof(i), sizeof(int));
    printf("sizeof(j) = %zu, sizeof(int *) = %zu\n", sizeof(j), sizeof(int *));
}
heim$ gcc -Wall -std=c11 -o pointers2 pointers2.c
heim$ ./pointers2
i=3
j=0x7ffd9a9a4254
i=5
sizeof(i) = 4, sizeof(int)   = 4
sizeof(j) = 8, sizeof(int *) = 8
heim$ 

Note that you get a different output on thales:

thales$ gcc -Wall -std=c11 -o pointers2 pointers2.c
thales$ ./pointers2
i=3
j=8046b68
i=5
sizeof(i) = 4, sizeof(int)   = 4
sizeof(j) = 4, sizeof(int *) = 4
thales$ 

Example: Call by reference

int
printf(const char *, ...);

void
foo(int *i)
{
    *i = 5;
}

int
main()
{
    int  i = 3;

    printf("i = %d\n", i);

    foo(&i);

    printf("i = %d\n", i);
}
heim$ gcc -Wall -std=c11 -o pointers4 pointers4.c
heim$ ./pointers4
i = 3
i = 5
heim$