typedef用法详解

来源:互联网 发布:ios修改游戏数据 编辑:程序博客网 时间:2024/06/05 05:08

typedef的一般形式为:

typedef   类型     定义名;

 

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

 

其实,在C语言中声明变量的时候,有个存储类型指示符(storage-class-specifier),它包括我们熟悉的extern、static、auto、register。在不指定存储类型指示符的时候,编译器会根据约定自动取缺省值。另外,存储类型指示符的位置也是任意的(但要求在变量名和指针*之前),也就是说以下几行代码是等价的:

static const int i;

const static int i;

int const static i;

const int static i;

 

 

根据C语言规范,在进行句法分析的时候,typedef和存储类型指示符是等价的!所以,我们把上述使用static的地方替换为typedef:

typedef const int i;

const typedef int i;

int const typedef i;

const int typedef i;

 

 

上述代码的语义是:将i定义为一个类型名,其等价的类型为const int。以后如果我们有i   a代码,就等价于const int a。对于有指针的地方也是一样的,比如:

int const typedef *t;那么代码t   p。就相当于int const *p。

 

另外,typedef不能和static等存储类型指示符同时使用,因为每个变量只能有一种存储类型,所以代码:typedef static int i;是非法的。

 

使用typedef简化复杂的变量声明

1)、定义一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数,并返回一个整型?

第一种方法:

                 int (*a[10])(int);

第二种方法:

                  typedef int (*pfunc)(int);

                  pfunc a[10];

 

2)、定义一个有10个指针的数组,该指针指向一个函数,该函数有一个函数指针(不带参数,返回值为空)参数,并返回空。

第一种方法:

                  void (*a[10])(void (*)(void));

第二种方法:

                  typedef void (*pfuncParam)(void);

                  typedef void (*pfunc)(pfuncParam);

                  pfunc a[10];

 

3)、一个指向有10个函数指针(不带参数,返回值为double)数组的指针

第一种方法:

                 double (*)(void) (*p)[10];

第二种方法:

                 typedef double (*pfunc)(void);

                 typedef pfunc (*pfuncParam)[10];

                 pfuncParam p;

 

总结:

typedef有两种用法:

一、一般形式,定义已有类型的别名

  typedef   类型    定义名;

 

二、创建一个新的类型

     typedef   返回值类型   新类型名(参数列表);

转自:http://hi.baidu.com/ctrlaltz/blog/item/890cbbd312eac2033bf3cffe.html
原创粉丝点击