Typedef

(1) 为特定的类型指定了一个同义字(synonyms)。例如
①typedef int Num[100];
Num a;       Num是int [100]的同义词
②typedef int (*Pointer)();
Pointer  p1;  Pointer是int (*)()的同义词
(2) 用typedef只是对已经存在的类型指定一个新的类型名,而没有创造新的类型。
(3)用tyoedef声明数组类型、指针类型,结构体类型、共用体类型、枚举类型等,使得编程更加方便。
(4) 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typefef名称了。
(5) 使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* typedef 定义步骤:
1、按定义变量方法先写出定义体   如     int   i;
 2、将变量名换成新类型名               如     int  INTEGER;
3、最前面加typedef          如  typedef   int   INTEGER;
4、用新类型名定义变量*/
//typedef   type   NewTypeName;
typedef int Integer;  //编译时处理,只是为类型起别名,并没有创建类型。不能为变量创建别名

#define I i      //define #开头是预编译时处理, 是替换适用于任何场合

void go(){
    printf("gogogo");
}

//简化了结构体
typedef struct info{
    char name[23];
    int age;
}INFO;   // INFO此时就是结构体类型,使用INFO定义变量    INFO info1 ={"luoxy", 18};
//简化结构体指针
typedef INFO *pI;   //此时pI是结构体指针类型,可以用pI定义结构体指针变量, 例如: pI p1; 此时p1就是一个结构体指针变量

void main(){
    Integer i=10 ;   //等价于int i =10;
    printf("%d\n",I);

    int a[100];
    typedef int ARR[100];   //把类型数组名替换成ARR  ARR = int [100]
    ARR x;      //此句等价于  int x[100];

    char *str;
    typedef char *STR;    //STR = char *
    STR str1 = "China is great!";   //等价于 char *str1 = "China is great!";
    STR s[3] ={"China","is","great"};

   // void (*p) (); //函数指针
    //void (*GO) (); // 函数指针类型 GO是函数指针的名字, void (*)() 是函数指针的类型和参数列表
    typedef  void (*GO) ();    //函数指针类型名是GO
    GO g1 = go;  //简化函数指针,定义一个GO函数类型的指针变量go1,指向go()函数的首地址
    g1();
    //枚举类型
    //enum day {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};  //没有初始值默认为数字值:0,1,2,3,4,5,6,依次递增加1
    //enum days {Sunday=10,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};  //有初始值,从初始值开始递增1, 默认为数字值:10,11,12,13,14,15,16
    //enum days {Sunday=10,Monday=12,Tuesday,Wednesday,Thursday,Friday,Saturday};  //错误,只能递增 1
    enum days {Sunday=10,Monday=9,Tuesday=8,Wednesday=7,Thursday=6,Friday=5,Saturday=4};  //可以全部赋值
    enum days d=Sunday; //定义一个枚举型的变量d,存储Sunday的值,也就是10
    d--;  //此时d = 9, 也就Monday
}

 

posted @ 2019-08-12 16:55  Coding_Changes_LIfe  阅读(272)  评论(0编辑  收藏  举报