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行,修改之后看上去简洁很多。
    根据输入情况,效果图不同:
    
    效果图仅供参考。