467
|
1 int printf(const char *format, ...);
|
|
2
|
79
|
3
|
94
|
4 int
|
|
5 a0(int i);
|
79
|
6
|
|
7 int (*conv)(int);
|
|
8
|
482
|
9 int
|
79
|
10 a0(int i)
|
|
11 {
|
|
12 return i+3;
|
|
13 }
|
|
14
|
482
|
15 int
|
79
|
16 a1(int i)
|
|
17 {
|
|
18 return i-3;
|
|
19 }
|
|
20
|
|
21
|
482
|
22 int
|
79
|
23 a2(int i,int conv(int))
|
|
24 {
|
|
25 return conv(i);
|
|
26 }
|
|
27
|
482
|
28 int
|
79
|
29 a3(int i,int (*conv)(int))
|
|
30 {
|
|
31 return conv(i);
|
|
32 }
|
|
33
|
482
|
34 int
|
79
|
35 a4(int i,int conv(int))
|
|
36 {
|
|
37 return (*conv)(i);
|
|
38 }
|
|
39
|
482
|
40 static
|
|
41 int a5(int i,int (*conv)(int))
|
79
|
42 {
|
|
43 return (*conv)(i);
|
|
44 }
|
|
45
|
482
|
46 typedef int (*fptr)(int,int (*)(int));
|
|
47
|
|
48 unsigned long addrs[]={
|
|
49 (unsigned long)&a0,
|
|
50 (unsigned long)&a5,
|
|
51 (unsigned long)a0,
|
|
52 (unsigned long)a5,
|
|
53 0,
|
|
54 };
|
|
55
|
|
56 fptr faddrs[]={
|
|
57 &a2,
|
|
58 &a5,
|
|
59 a2,
|
|
60 a5,
|
|
61 0,
|
|
62 };
|
|
63
|
|
64
|
483
|
65 int
|
79
|
66 main(int ac,char *av[]) {
|
|
67 int j,k;
|
|
68 conv = a0;
|
|
69 j = conv(3);
|
|
70 k = a2(4,a1);
|
491
|
71 printf("#0070:6 1 = %d %d\n",j,k);
|
79
|
72 k = a3(4,a1);
|
491
|
73 printf("#0072:6 1 = %d %d\n",j,k);
|
79
|
74 k = a4(4,a1);
|
491
|
75 printf("#0074:6 1 = %d %d\n",j,k);
|
79
|
76 k = a5(4,a1);
|
491
|
77 printf("#0076: 1 = %d %d\n",j,k);
|
|
78 printf("#0077: 1 = %d\n",(unsigned long)a0 == addrs[0]);
|
|
79 printf("#0078: 1 = %d\n",(unsigned long)a5 == addrs[1]);
|
|
80 printf("#0079: 1 = %d\n",(unsigned long)a0 == addrs[2]);
|
|
81 printf("#0080: 1 = %d\n",(unsigned long)a5 == addrs[3]);
|
482
|
82
|
491
|
83 printf("#0082: 1 = %d\n",a2 == faddrs[0]);
|
|
84 printf("#0083: 1 = %d\n",a5 == faddrs[1]);
|
|
85 printf("#0084: 1 = %d\n",&a2 == faddrs[2]);
|
|
86 printf("#0085: 1 = %d\n",&a5 == faddrs[3]);
|
172
|
87 return 0;
|
79
|
88 }
|