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$