177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test1() { 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int a = 3; 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int* pb = &a; 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int c = *pb; 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Reading from a pointer: %d %d\n", a, c); 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao *pb = 4; 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Writing to a pointer: %d\n", a); 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing casts: %d %g %g %d\n", 3, (float) 3, 4.5, (int) 4.5); 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test2() { 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int x = 4; 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = &x; 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao // int z = * px; // An error, expected a pointer type 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int y = * (int*) px; 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing reading (int*): %d\n", y); 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test3() { 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = (int) malloc(120); 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (int*) px = 8; 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (int*) (px + 4) = 9; 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing writing (int*): %d %d\n", * (int*) px, * (int*) (px + 4)); 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao free((void*) px); 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test4() { 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int x = 0x12345678; 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = &x; 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int a = * (char*) px; 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int b = * (char*) (px + 1); 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int c = * (char*) (px + 2); 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int d = * (char*) (px + 3); 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing reading (char*): 0x%02x 0x%02x 0x%02x 0x%02x\n", a, b, c, d); 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test5() { 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int x = 0xFFFFFFFF; 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = &x; 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (char*) px = 0x21; 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (char*) (px + 1) = 0x43; 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (char*) (px + 2) = 0x65; 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (char*) (px + 3) = 0x87; 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing writing (char*): 0x%08x\n", x); 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint f(int b) { 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("f(%d)\n", b); 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return 7 * b; 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test6() { 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int fp = &f; 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int x = (*(int(*)()) fp)(10); 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Function pointer result: %d\n", x); 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test7() { 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = (int) malloc(120); 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (float*) px = 8.8f; 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (float*) (px + 4) = 9.9f; 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing read/write (float*): %g %g\n", * (float*) px, * (float*) (px + 4)); 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao free((void*) px); 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid test8() { 6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int px = (int) malloc(120); 6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (double*) px = 8.8; 6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * (double*) (px + 8) = 9.9; 7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("Testing read/write (double*): %g %g\n", * (double*) px, * (double*) (px + 8)); 7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao free((void*) px); 7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main() { 7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test1(); 7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test2(); 7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test3(); 7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test4(); 8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test5(); 8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test6(); 8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test7(); 8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao test8(); 8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return 0; 8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 86