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