惧留孙网

juliusun.com

在线教程 > C语言教程 > 定义新类型typedef

定义新类型typedef

第 40/50 节 冥河C语言教程


typedef可以定义新的数据类型。严格来说,typedef是给数据类型定义一个别名,只不过看上去像新定义一个类型一样。

定义类型的别名后,就可以用别名来定义变量了,与原类型一样。

给类型定义一个别名,有时可以缩小我们的代码量,有时可以让类型看上去更加直观。

typedef可以给类型定义一个别名,用法如下:

typedef 类型名 类型别名

例:


  1. typedef char Ascii; //将char取一个别名叫Ascii
  2. Ascii c = 'a'; //用别名来定义一个变量,等同于char c='a';
  3. typedef int * Point;//给int *取一个别名叫Point;
  4. Point p = NULL; //等同于int * p = NULL

用来定义数组类型,如:


  1. typedef int Array[10]; //Array表示10个元素的int类型数组
  2. Array a; //相当于int a[10];

用来定义函数指针类型,如:


  1. typedef int (* P_ADD)(int a,int b); //P_ADD类型为指向参数为两个int类型、返回值为int类型的函数指针
  2. P_ADD pfun = NULL; //等同于int (*pfun)(int a,int b);

函数指针可以复习 函数指针 小节。

一般,可以简单看作,把typedef语句里的别名直接替换为变量,就可以了。

下面以一个程序的代码优化为例来看一下typedef的用处。

例:


  1. #include<stdio.h>
  2. struct Student{
  3. char name[20];
  4. int id;
  5. int grade; //表示分数
  6. };
  7. struct Student * update_full_grade(struct Student * pstu) //将学生分数更新成满分
  8. {
  9. pstu->grade = 100;
  10. return pstu;
  11. }
  12. int main( )
  13. {
  14. struct Student s1 = {"Zhang San",1234,99}; //定义一个学生结构体
  15. update_full_grade(&s1); //更新学生成绩
  16. printf("更新后的信息:\n学号\t成绩\t名字\n%d\t%d\t%s\n",s1.id,s1.grade,s1.name); //输出信息
  17. getchar( ) ; //使程序暂停一下
  18. return 0;
  19. }

上述代码出现了多个struct Student,写作起来或是修改起来麻烦,用typedef给它起个别名。例:


  1. #include<stdio.h>
  2. struct Student{
  3. char name[20];
  4. int id;
  5. int grade; //表示分数
  6. };
  7. typedef struct Student STU; //开始定义类型别名
  8. typedef struct Student * PSTU;
  9. PSTU update_full_grade(PSTU pstu) //参数返回值都使用类型别名
  10. {
  11. pstu->grade = 100;
  12. return pstu;
  13. }
  14. int main( )
  15. {
  16. STU s1 = {"Zhang San",1234,99}; //使用类型别名
  17. update_full_grade(&s1);//更新学生成绩
  18. printf("更新后的信息:\n学号\t成绩\t名字\n%d\t%d\t%s\n",s1.id,s1.grade,s1.name); //输出信息
  19. getchar( ) ; //使程序暂停一下
  20. return 0;
  21. }

注意修改前的代码第9行和第18行,修改之后看上去简洁很多。

根据输入情况,效果图不同:

Pic

效果图仅供参考。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的