这我们编程过程中,或者阅读其他人开放的源码时,经常会看到用typedef关键字来对类型等声明一个别名,以来满足个人的编码风格。
C typedef是C语言提高的关键字,一般用来为类型取一个别名,用法相对来说比较灵活多变。
例如:
typedef unsigned int UINT;
这时UINT就是unsigned int的别名,两者同义。
用来给自定义数据类型取别名
typedef struct STNode
{
?char name[32];
?char value[32];
} STNode;
这时,在创建数据类型对象时,可以直接
STNode demo;
无需
struct STNode demo;
这样做可以是代码更加节简。
申明函数指针
typedef void (*pfun)(int);
这里指的是,pfun是一个指针,指针指向的内容是一个函数,函数的参数是int。
ps:如何解读复杂申明“右左法则”
冲变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,继续按照前面的方式解读,一次递归进行。
例如一:
typedef int (*func)(int *p);
先找变量名func,外面有一对圆括号,而且变量左边是一个*号,这说明func是一个指针;
然后跳出这个括号,先看右边,又遇到圆括号,这说明(*func)是一个函数,所以func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回类型为int。
例如二:
typedef int (*func[5])(int *);
func右边是一对[]运算符,说明func是具有5个元素的数组;
func的左边有一个*,说明func的元素是指针。跳出这个括号,看右边,又遇到圆括号,说明func数组的元素是函数类型的指针,它指向的函数具有int*类型的形参,放回值类型为int。
typedef的注意事项
typedef申明的对象,在结合const用时,会产生副作用。typedef是给类型取新的别名,不同于宏,他不是简单的字符串替换。
typedef char* PCHAR;
int Istrcmp(const PCHAR, const PCHAR);
这时const PCHAR实际上相当于chr* const。因为const是给予雷整个指针本身以常量属性。也就形参了常量指针char* const。简单来说,记住当const和typedef一起出现是,typedef不会是简单字符串替换。
参考引文地址:
阅读(871) | 评论(0) | 转发(0) |