A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

typedef主要作用就是给数据类型的关键字起一个别名,以方便记忆或者简化一些较复杂的类型名字。


(1)我们有一个程序,程序中需要经常定义 volatile unsigned int类型的变量,那么为了简单起见,我们可以事先利用 typedef关键字简化volatile unsigned int,如下:

  1. typedef   volatile unsigned int    vo_usint;
复制代码
简化为vo_usint(这个简化只是想说明我的意思,实际运用中可根据具体情况简化为更有可读性的名字)


(2)接下来再看一个我们比较常见的typedef在结构体中的运用。

我们先定义一个结构体:

  1. struct Student
  2.    {
  3.            char *name;
  4.            int number;            
  5.    };
复制代码

然后我们定义一个此结构体类型的变量PrimaryS:


第一种方法:使用结构体名直接定义

  1. struct Student PrimaryS;   //使用结构体名直接定义
复制代码
第二种方法:用typedef给结构体名换个名字,然后用新的结构体名定义

  1. typedef struct Student SST;   //起个别名
  2. SST PrimaryS;                //用新名直接定义
复制代码
第三种方法:和第二种方法类似起个别名,不过是在定义结构体的时候直接起名

  1. typedef struct Student
  2.    {
  3.       char *name;
  4.           int number;

  5.    }SST;
  6.     SST PrimaryS;        //用新名直接定义变量
复制代码
第三种方法是我们见过的用的最多的一种。


(3)typedef还可以定义数组类型,比如我们要定义三个数组a[10],b[10],c[10],我们通俗的定义方法为:

  1. int a[10],b[10],c[10];
复制代码
使用typedef定义数组类型array[10],然后再定义a[10],b[10],c[10];

  1. typedef int ayyay[10];    //定义数组类型名
  2.   array a,b,c;            //定义数组a[10],b[10],c[10]
复制代码
(4)typedef和#define的区别这里只做一个简单的举例,就能明白二者区别,至于#define的具体用法可参考上一篇博客http://blog.csdn.net/hongjitong2/article/details/48766847


下面举例说明typedef和#define的区别:

  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. #define   DEintp               int*
  4. typedef   char*               TYcharp; //注意:此处结束有“;”
  5. void main()
  6. {  int m=7;
  7.    char ch='H';
  8.    DEintp a,b;              //定义int*类型的a,b           
  9.    TYcharp c,d;             //定义char*类型的c,d
  10.    a=&m;                    //将m,ch的地址赋予abcd
  11.    b=&m;
  12.    c=&ch;
  13.    d=&ch;
  14.    printf("%d,%d,%c,%c\n",*a,*b,*c,*d);           //打印
  15.     system("pause") ;             //DOS窗口停留  
  16. }
复制代码
这段不能运行,程序报错为:此行b=&m;'=' : cannot convert from 'int *' to 'int,意思是指针类型的值(地址)不赋予整型变量,也就是说变量b不是int*指针类型,而是int类型,DEintp没有把变量b定义为int*,而是定义成为了int,但是变量a却成功定义,所以:

  1. DEintp a,b;              //等价于:int *a,b;或者int*a;int b;
复制代码
  1. TYcharp c,d;             //而这一句等价于:char* c;char* d;
复制代码
好现在我们了解了tyedef和#define的区别。






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马