C语言笔记之typedef

typedef 这个关键字用于给一个类型起个新的名字,和define不同, typedef 给出的符号名称仅限于对类型 , 而不是对值。下面是一个例子:

typedef short wchar;   

typedef将short类型定义成wchar类型,那么以后遇到 wchar a; 其实就是 short a;  如果没有typedef这个关键字,wchar就是一个变量名,加上typedef,wchar就成了类型名。类型名也遵循标识符的命名规则,并且通常加个 _t 后缀,表示Type。

这样做有什么用处呢?仅仅从short这种基本类型是看不出来好处的,typedef的强大之处在于重定义复合类型,给复合类型一个新的名字,以后就可以直接使用新名字来声明变量,而不必写一堆长长的复合类型。当然,某些情况下,也需要对基本类型重命名,比如平台移植之类的。

下面分几种情况描述typedef的用法。

1、指针

考虑这么一个声明:

typedef char * string;

那么string就是一个指针类型,它指向char类型。于是,

string a,b;  

就定义了两个指针变量,它们都指向char类型的变量。相当于:

char *a, *b;


2、数组

typedef int  array[5];

array就是一种新类型,它代表有5个int类型数值的数组,array  new;  就相当于 int new[5];

这个形式理解起来有点费力,可以采用上面的方法:如果没有typedef,那么array就是一个普通的数组名;有了typedef , array就成了一个类型名。


3、结构体

结构是typedef的主要战场,因为一般结构体实在太长了,只有重命名才能简化代码。比如下面这个:

struct {

int a;

double *b;

char name;

} sth;

然后,声明变量时虽然可以这样: struct sth one, two;  但是每次都要写一个struct仍然比较烦。好的办法是这样:

typedef struct {

int a;

double *b;

char name;

} sth;

然后就可以直接 sth one, two; 了。


4、函数

你没看错,typedef甚至可以定义函数类型!!如下:

typedef int func(double var);

这样就定义了一个函数类型func,以后就可以用func来定义变量。这条语句的理解同上面,先去掉typedef,再加上typedef,看func的含义变化。

定义了变量之后,就可以直接把这个变量当做函数名来使用,比如:

func a;

double b = 2;

int c = a(2);


以上就是typedef的一些主要用法。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。