1 void test1() { 2 int a = 3; 3 int* pb = &a; 4 int c = *pb; 5 printf("Reading from a pointer: %d %d\n", a, c); 6 *pb = 4; 7 printf("Writing to a pointer: %d\n", a); 8 printf("Testing casts: %d %g %g %d\n", 3, (float) 3, 4.5, (int) 4.5); 9 } 10 11 void test2() { 12 int x = 4; 13 int px = &x; 14 // int z = * px; // An error, expected a pointer type 15 int y = * (int*) px; 16 printf("Testing reading (int*): %d\n", y); 17 } 18 19 void test3() { 20 int px = (int) malloc(120); 21 * (int*) px = 8; 22 * (int*) (px + 4) = 9; 23 printf("Testing writing (int*): %d %d\n", * (int*) px, * (int*) (px + 4)); 24 free((void*) px); 25 } 26 27 void test4() { 28 int x = 0x12345678; 29 int px = &x; 30 int a = * (char*) px; 31 int b = * (char*) (px + 1); 32 int c = * (char*) (px + 2); 33 int d = * (char*) (px + 3); 34 printf("Testing reading (char*): 0x%02x 0x%02x 0x%02x 0x%02x\n", a, b, c, d); 35 } 36 37 void test5() { 38 int x = 0xFFFFFFFF; 39 int px = &x; 40 * (char*) px = 0x21; 41 * (char*) (px + 1) = 0x43; 42 * (char*) (px + 2) = 0x65; 43 * (char*) (px + 3) = 0x87; 44 printf("Testing writing (char*): 0x%08x\n", x); 45 } 46 47 int f(int b) { 48 printf("f(%d)\n", b); 49 return 7 * b; 50 } 51 52 void test6() { 53 int fp = &f; 54 int x = (*(int(*)()) fp)(10); 55 printf("Function pointer result: %d\n", x); 56 } 57 58 void test7() { 59 int px = (int) malloc(120); 60 * (float*) px = 8.8f; 61 * (float*) (px + 4) = 9.9f; 62 printf("Testing read/write (float*): %g %g\n", * (float*) px, * (float*) (px + 4)); 63 free((void*) px); 64 } 65 66 void test8() { 67 int px = (int) malloc(120); 68 * (double*) px = 8.8; 69 * (double*) (px + 8) = 9.9; 70 printf("Testing read/write (double*): %g %g\n", * (double*) px, * (double*) (px + 8)); 71 free((void*) px); 72 } 73 74 75 int main() { 76 test1(); 77 test2(); 78 test3(); 79 test4(); 80 test5(); 81 test6(); 82 test7(); 83 test8(); 84 return 0; 85 } 86