86 lines
1.8 KiB
C
86 lines
1.8 KiB
C
|
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;
|
||
|
}
|