typedef与#define :
typedef int* point;
#define int INT
typedef是一种彻底的封装类型——在声明它之后不能再往里面增加别的东西。主要体现在两方面:
/* 1.不能用其他类型说明符进行扩展*/
unsigend point j; //这是非法的!
unsigned INT i; // 没问题,i是指向无符号整型变量的指针
/*2.在连续几个变量的声明中,#define定义的类型不能保证所有的变量为同种类型*/
point a, b; // a和b都是指向整型变量的指针
INT c, d; // c是整型变量指针,d是整型变量
typedef关键字:给类型定义一个新名字
a. typedef int INT; //INT就是int的新名字,如INT a;
b. typedef int array[5]; //array就是整型数组类型int [5]的新名字,如array a;//等价于int a[5];
c. typedef int* p; //p就是整型指针类型int* 的新名字,如p pitr;//等价于int *pitr;
d. typedef void (*sighandler_t)(int); //sighandler_t就是函数指针void (* )(int)的新名字,如sighandler_t handler;//等价于void (*handler)(int);
e. typedef void __signalfn_t(int); //相当于typedef void ()(int) __signalfn_t;
f. typedef __signalfn_t *__sighandler_t; // 相当于typedef void (* )(int) __sighandler_t;
g. typedef struct infor{ … }STU,*STUP;//STU就是结构体struct infor的别名,如STU stu;//等价于struct stu{…};而STUP stu是结构体struct infor*的别名,stu是一个结构体指针。
试分析下列声明:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
//signal带两个参数,一个是int型参数,另一个是函数指针类型,signal函数返回值是一个函数指针,该函数指针是一个地址,所以signal是指针函数类型。
/*等价于=>void (*signal(int signum,void(* handler)(int)))(int)*/