一、基本定义:声明一个新的类型名来代替已有的类型,从而我们方面使用。
二、使用typedef的场合:
1>基本数据类型
2>指针
3>结构体
4>枚举
5>指向函数的指针
下面分别举例来说明一下具体用法
1.1定义基本数据类型
typedef int Myint; //Myint 新的类型名 相当于给int取了个别名
//这里就可以用这个别名来定义int类型的变量
Myint a=10;
同样的基本类型的其他数据类型(float、double、char)都可以利用这种定义方式。
2.1指针
typedef char* String;
String name="tom";
3.1结构体
首先定义一个结构体类型:
struct Student
{
int age ;
char name;
};
通常情况下我们定义一个结构体变量的时候这么做:
struct Student stu; 如果还想再定义一个 只能在写一遍 struct Student stu2; 很麻烦。所以这里我们利用typedef来定义:
第一种方式:
struct Student
{
int age ;
char name;
};
typedef struct Student Mystu;
第二种方式:
typedef struct Student (Student 也可以省略)
{
int age ;
char name;
} Mystu;
4.1枚举
定义枚举类型原理和定义结构体类型类似。
enum Sex {Man,Woman,Unkown};
typedef enum Sex Mysex;
Mysex s=Man;
或者
typedefenum Sex Mysex {Man,Woman,Unkown};
或者 typedefenum Sex (这里的Sex也可以省略){Man,Woman,Unkown}Mysex;
5.1定义指向函数的指针
首先写一个正常情况下(不用typedef)指向函数的指针:
int sum(int a, int b)
{
return a + b;
}
int main()
{
//定义一个指针指向sum函数
int (*p) (int, int)=sum;
return 0;
}
如果下次我们还想在main函数中定义一个指针指向sum2 函数,还得再写int (*p) (int, int)=sum2; 这样很复杂,所以我们引用了typedef,就会变得很简洁。
typedeint (*MyPoint) (int, int); //Mypoint 就是我们定义指向函数指针的类型名称
int sum(int a, int b)
{
return a + b;
}
int sum2(int a, int b)
{
return a + b;
}
int main()
{
//这样写就变得很简洁
Mypoint p = sum;
Mypoint p2 = sum2;
return 0;
}
补充:typedef 与宏的区别
例如:
#define String2 char*
typedef char * String;
String s1,s2;
s1="tom"; s2="rose";
String2 s3,s4;
区别在于用法上的不同:这里的变量s1,s2是char * 指针,而s3是char * 指针,s4只是char 类型。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |