一、作用
给已经存在的类型起一个新的名称
二、使用场合
(1)基本数据类型
typedef int MyInt;
typedef MyInt MyInt2;
int a=10;
MyInt b = 10;
MyInt2 c = 20;
(2)指针
给指针类型char *起一个新的类型名称String,String现在是指针类型。
typedef char * String;
(3) 结构体
struct Student
{
int age;
};
typedef struct Student MyStu;
typedef struct Student
{
int age;
} MyStu;
typedef struct
{
int age;
} MyStu;
struct Student stu; 第三种写法不可以这样定义结构体变量
MyStu stu2,stu3;
MyStu stu4 = {20};
(4) 枚举
enum Sex {Man, Woman};
typedef enum Sex MySex;
typedef enum Sex {
Man,
Woman
} MySex;
typedef enum {
Man,
Woman
} MySex;
enum Sex s = Man;
MySex s2 = Man;
(5)指向结构体的指针
struct Person
{
int age;
};
struct Person p = {20};// 定义结构体变量p
struct Person *p2 = &p;//指针变量p2指向结构体变量p
或者
typedef struct Person * PersonPoint;
PersonPoint p2 = &p;
typedef struct Person
{
int age;
} * PersonPoint;
(6)指向函数的指针
typedef int (*MyPoint)(int, int);
int sum(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
//定义指针指向sum函数,接受2个int类型的参数并返回int类型
int (*p)(int, int) = sum;
int (*p2)(int, int) = minus;
//调用
p(10, 11);
p2(10,11);
使用typedef
typedef int (*MyPoint)(int, int);
MyPoint p = sum;
MyPoint p2 = minus;
//调用
p(10, 11);
p2(10,11);
三、注意
1、注意类型顺序
typedef unsigned long int MyInt;
typedef int Integer;
#define Integer int // 没有分号
Integer i = 10;
typedef是给int类型起一个新名字Integer(仍是类型),宏定义是将Integer替换为int
2、和#define区别
typedef char * String; // String仍为类型
String s1, s2; // s1、s2都是String类型,即char *类型
s1 = "jack";
s2 = "rose";
#define String2 char *
String2 s3, s4; // s3才是char *指针,s4只是char
相当于char *s3, s4;
或
char *s3;
char s4;