typedef可以定义新的数据类型。严格来说,typedef是给数据类型定义一个别名,只不过看上去像新定义一个类型一样。
定义类型的别名后,就可以用别名来定义变量了,与原类型一样。
给类型定义一个别名,有时可以缩小我们的代码量,有时可以让类型看上去更加直观。
typedef可以给类型定义一个别名,用法如下:
typedef 类型名 类型别名
例:
- typedef char Ascii;
- Ascii c = 'a';
- typedef int * Point;
- Point p = NULL;
用来定义数组类型,如:
- typedef int Array[10];
- Array a;
用来定义函数指针类型,如:
- typedef int (* P_ADD)(int a,int b);
- P_ADD pfun = NULL;
函数指针可以复习 函数指针 小节。
一般,可以简单看作,把typedef语句里的别名直接替换为变量,就可以了。
下面以一个程序的代码优化为例来看一下typedef的用处。
例:
- #include<stdio.h>
- struct Student{
- char name[20];
- int id;
- int grade;
- };
- struct Student * update_full_grade(struct Student * pstu)
- {
- pstu->grade = 100;
- return pstu;
- }
- int main( )
- {
- struct Student s1 = {"Zhang San",1234,99};
- update_full_grade(&s1);
- printf("更新后的信息:\n学号\t成绩\t名字\n%d\t%d\t%s\n",s1.id,s1.grade,s1.name);
- getchar( ) ;
- return 0;
- }
上述代码出现了多个struct Student,写作起来或是修改起来麻烦,用typedef给它起个别名。例:
- #include<stdio.h>
- struct Student{
- char name[20];
- int id;
- int grade;
- };
- typedef struct Student STU;
- typedef struct Student * PSTU;
- PSTU update_full_grade(PSTU pstu)
- {
- pstu->grade = 100;
- return pstu;
- }
- int main( )
- {
- STU s1 = {"Zhang San",1234,99};
- update_full_grade(&s1);
- printf("更新后的信息:\n学号\t成绩\t名字\n%d\t%d\t%s\n",s1.id,s1.grade,s1.name);
- getchar( ) ;
- return 0;
- }
注意修改前的代码第9行和第18行,修改之后看上去简洁很多。
根据输入情况,效果图不同:
效果图仅供参考。