使用typedef定义数据类型

  • Post author:
  • Post category:其他




我们在C语言的关键字表中能够找到关键字typedef,它的意义是为复杂的声明定义简单的别名。对于这个单词,我们可以拆解,type为类型的意思,def是define(定义)的缩写。所以typedef的意义是为复杂的声明定义简单的别名。



关键字typedef用于为系统固有的或用户自定义的数据类型定义一个别名。假设有一个结构用三个坐标x,y,z表示一个点。它的定义如下:

struct pts
{
   int x;
   int y;
   int z;
};




结构也是一种数据类型,那么关键字typedef也能为其定义一个别名。



我们就用关键字typedef为这个结构定义一个更方便的名字point,语句如下:




typedef struct pts point;




//这条语句指定名称point是struct pts的同义字。



利用typedef为数据类型定义一个别名后,有什么用途吗?例如上述利用typedef为结构struct pts定义一个别名point后,可以怎么用呢?



答:在定义结构变量时,有struct pts start_pt;因为




typedef struct pts point;




这条语句指定名称point是struct pts的同义字。所以在struct pts start_pt;这条语句中,利用等量代换,有


point start_pt;


即声明一些变量时,可以有以下语句:

point start_pt;
point end_pt;



typedef除了可以为结构定义别名外,还可以为基本的数据类型重新定义名称,以反映变量的含义。例如当程序涉及到不同种类物品的价格,如苹果的价格和衣服的价格,此时类型名称定义为double的同义词。

typedef double price;
//可以使用price声明变量
price apple;
price clothes;
//这些变量都是double类型,只是price是double的同义字


总结:typedef只是为一种已经存在的

数据类型

定义一个新的名称而已,并非定义一种新的数据类型。



下面我们通过一个例子来加深对typedef的理解:

//输入n个学生的信息,输出最高分学生的信息
#include<stdio.h>

typedef struct student
{
   char ID[10];
   char name[10];
   char sex;
   float score;
}STUDENT;

int main()
{
   STUDENT stu,first;
   int n,i;

   printf("请输入学生人数:");
   scanf("%d", &n);
   first.score = -1;  //把临时最优值first的成绩赋初始值-1
   printf("请输入%d个学生的信息(学号 姓名 性别 成绩):\n", n);
   
   for(i=1; i<=n; i++)
   {
      scanf("%s",stu.ID);
      scanf("%s",stu.name);
      scanf("%*c%c",&stu.sex);
      scanf("%f", &stu.score);
 
      if(stu.score > first.score)
         first = stu;
   }

   printf("最高分学生的信息如下:\n");
   printf("学号:%s\n",first.ID);
   printf("姓名:%s\n",first.name);
   printf("性别:%c\n",first.sex);
   printf("成绩:%4.1f\n",first.score);
   return 0;
}


STUDENT stu, first;//

这条语句声明两个STUDENT类型的结构变量,first用来保存当前分数最高的学生信息,first.score初始存放一个最小值,stu来循环接受每次读入的学生信息。




总结:利用typedef可以为数据类型起一个别名。




版权声明:本文为weixin_47264304原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。