typedef主要作用就是给数据类型的关键字起一个别名,以方便记忆或者简化一些较复杂的类型名字。
(1)我们有一个程序,程序中需要经常定义 volatile unsigned int类型的变量,那么为了简单起见,我们可以事先利用 typedef关键字简化volatile unsigned int,如下: - typedef volatile unsigned int vo_usint;
复制代码 简化为vo_usint(这个简化只是想说明我的意思,实际运用中可根据具体情况简化为更有可读性的名字)
(2)接下来再看一个我们比较常见的typedef在结构体中的运用。 我们先定义一个结构体: - struct Student
- {
- char *name;
- int number;
- };
复制代码
然后我们定义一个此结构体类型的变量PrimaryS:
第一种方法:使用结构体名直接定义 - struct Student PrimaryS; //使用结构体名直接定义
复制代码 第二种方法:用typedef给结构体名换个名字,然后用新的结构体名定义
- typedef struct Student SST; //起个别名
- SST PrimaryS; //用新名直接定义
复制代码 第三种方法:和第二种方法类似起个别名,不过是在定义结构体的时候直接起名
- typedef struct Student
- {
- char *name;
- int number;
- }SST;
- SST PrimaryS; //用新名直接定义变量
复制代码 第三种方法是我们见过的用的最多的一种。
(3)typedef还可以定义数组类型,比如我们要定义三个数组a[10],b[10],c[10],我们通俗的定义方法为: 使用typedef定义数组类型array[10],然后再定义a[10],b[10],c[10]; - typedef int ayyay[10]; //定义数组类型名
- array a,b,c; //定义数组a[10],b[10],c[10]
复制代码 (4)typedef和#define的区别这里只做一个简单的举例,就能明白二者区别,至于#define的具体用法可参考上一篇博客http://blog.csdn.net/hongjitong2/article/details/48766847
下面举例说明typedef和#define的区别: - #include"stdio.h"
- #include"stdlib.h"
- #define DEintp int*
- typedef char* TYcharp; //注意:此处结束有“;”
- void main()
- { int m=7;
- char ch='H';
- DEintp a,b; //定义int*类型的a,b
- TYcharp c,d; //定义char*类型的c,d
- a=&m; //将m,ch的地址赋予abcd
- b=&m;
- c=&ch;
- d=&ch;
- printf("%d,%d,%c,%c\n",*a,*b,*c,*d); //打印
- system("pause") ; //DOS窗口停留
- }
复制代码 这段不能运行,程序报错为:此行b=&m;'=' : cannot convert from 'int *' to 'int,意思是指针类型的值(地址)不赋予整型变量,也就是说变量b不是int*指针类型,而是int类型,DEintp没有把变量b定义为int*,而是定义成为了int,但是变量a却成功定义,所以:
- DEintp a,b; //等价于:int *a,b;或者int*a;int b;
复制代码- TYcharp c,d; //而这一句等价于:char* c;char* d;
复制代码 好现在我们了解了tyedef和#define的区别。
|