犹记得当第一次看见c的signal函数的原型的时候,懵逼了,这是个啥啊
1 2 3
| typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
|
现在知道了,借助typedef声明了一个函数指针类型取名叫sighandler_t,这个函数指针
返回值是void,入参是int。然后声明了signal函数,signal函数的返回值是sighandler_t
这个类型的函数指针。
typedef可以帮我们简化复杂类型的声明,在不借助typedef的情况下,c语言应该怎么声明复杂的类型呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| #include <stdio.h> #include "stdlib.h"
int main(void) {
char (*p)[20]; p=(char(*)[20])malloc(20); free(p);
int a[20]; int (*p_a)[20] = &a;
int (**pp_a)[20] = &p_a; typedef int(*p_array)[]; p_array * p_c = &p_a; p_array** p_d = &p_c;
int *b[20]; int *(*p_b)[20] = &b; int *(**p_e)[20] = &p_b;
int** f[20];
int** (*p_f)[20] = &f;
char *(*g[20])[10];
int (*h[20])(int);
int i[2][12]; int (*p_i)[][12] = &i; int (*p_i1)[12] = i;
int *(*(*func)(void))[][10];
int *(*(*func_a)(int))(int);
int (*(*pg)[20])(int); pg = &h;
int (*(*(*func_b)(int b))[20])(int);
char* (*(*(*ph)[20])(int))[10];
char *(*(*(*func_d)(int))(short))[15];
return 0; }
|