typedef的使用小结

来源:互联网 发布:java用户角色权限设计 编辑:程序博客网 时间:2024/05/17 08:13

    看完《C专家编程》后对typedef的使用有了更深的了解,在看了许多例子和实际使用多次后得出了一些规律,拿出来和大家分享,有不对的地方还需大家指正。

    用typedef之前要先了解C语言的声明方法。

   

char* (*fun)(char*)


这个声明从变量名fun开始解读,先向右读是')',这时要向左读‘*’,表明fun是一个指针,然后再向右读到了‘(’,说明指针指向一个函数,继续向右读是‘char*)’,说明这个函数是以char*为参数的,然后再向左读是‘*’,表明函数返回值是指针,继续向左读‘char’,表明指针指向char,这时我们已经读完了整个变量声明,可以连起来说就是fun是一个指针,指向一个函数,这个函数以指向char的指针为参数,返回值是指针,指向char型变量。

在这个例子里我想说明的是C语言声明的解读是机械固定的,有一个由内到外的具体套路,而不是靠经验来解读的,当然有经验能一眼看出来,至于具体解读套路可以去看看《C专家编程》,我也是看了这本书才搞明白的。

下面是typedef的说明了,网上关于typedef的使用说明一大堆,讲的已经很全了,我也搜了一下,发现还有很多我也不知道的地方,所以我也不仔细讲了,我就讲一点,这一点我好想没有在网上看到过,就是typedef具体如何使用。

假如我要声明一个上面fun所属的类型该怎么办,很简单

typedef char* (*fun_type)(char*);

定义fun只要

fun_type fun; 

再举一个简单的例子,我要定义一个char * 类型要怎么办,先定义一个char*类型的变量:

char* string

再把变量变成类型:
typedef char* string

所以typedef定义类型的原理很简单,先定义想要定义类型的变量,再加上typedef,变量名就成了类型名,所以我猜想编译器对typedef的类型名定义的变量的处理也许是这样的:
fun_type fun1,fun2;--------->char* (*fun1)(char*),char*  (*fun2)(char*);

也就是typedef的逆过程,用变量名替代typedef定义的类型名的位置,还原到一开始的定义方法,这样一来,定义的变量就一定我们想要的类型,这么看来,typedef与#define的区别显而易见,用define定义类型名只是简单的文本黏贴,无法定义复杂的类型,而typedef可以定义任意复杂的类型,所以自定义类型时typedef是最好的选择。

以上是我的小小心得,欢迎指正。

原创粉丝点击