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