void test1() { int a = 3; int* pb = &a; int c = *pb; printf("Reading from a pointer: %d %d\n", a, c); *pb = 4; printf("Writing to a pointer: %d\n", a); printf("Testing casts: %d %g %g %d\n", 3, (float) 3, 4.5, (int) 4.5); } void test2() { int x = 4; int px = &x; // int z = * px; // An error, expected a pointer type int y = * (int*) px; printf("Testing reading (int*): %d\n", y); } void test3() { int px = (int) malloc(120); * (int*) px = 8; * (int*) (px + 4) = 9; printf("Testing writing (int*): %d %d\n", * (int*) px, * (int*) (px + 4)); free((void*) px); } void test4() { int x = 0x12345678; int px = &x; int a = * (char*) px; int b = * (char*) (px + 1); int c = * (char*) (px + 2); int d = * (char*) (px + 3); printf("Testing reading (char*): 0x%02x 0x%02x 0x%02x 0x%02x\n", a, b, c, d); } void test5() { int x = 0xFFFFFFFF; int px = &x; * (char*) px = 0x21; * (char*) (px + 1) = 0x43; * (char*) (px + 2) = 0x65; * (char*) (px + 3) = 0x87; printf("Testing writing (char*): 0x%08x\n", x); } int f(int b) { printf("f(%d)\n", b); return 7 * b; } void test6() { int fp = &f; int x = (*(int(*)()) fp)(10); printf("Function pointer result: %d\n", x); } void test7() { int px = (int) malloc(120); * (float*) px = 8.8f; * (float*) (px + 4) = 9.9f; printf("Testing read/write (float*): %g %g\n", * (float*) px, * (float*) (px + 4)); free((void*) px); } void test8() { int px = (int) malloc(120); * (double*) px = 8.8; * (double*) (px + 8) = 9.9; printf("Testing read/write (double*): %g %g\n", * (double*) px, * (double*) (px + 8)); free((void*) px); } int main() { test1(); test2(); test3(); test4(); test5(); test6(); test7(); test8(); return 0; }