typedef:在计算机编程语言中用来为复杂的声明定义简单的别名(给类型起别名,整体类型替换),它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中
语法格式:typedef 类型 别名
typedef char *String; //给指针类型char *起别名为String(右边替换左边)
String s1,s2; // typedef s1,s2 定义了两个char类型的指针s1,s2
#define:宏定义又称为宏代换、宏替换,简称“宏”,可以用#undef取消宏定义的作用
语法格式:#define 别名 类型
#define String char * ;//将代码里面的所有String都转换成char *
String s1,s2; //#define 定义了 一个char类型的指针s1,以及char类型的变量s2
上面两个定义的格式说明了宏定义与typedef的区别,typedef是整体替换,替换后两个都是char *类型的指针,宏定义是替换一次,只有前面的才是char *类型的指针,后面则是char类型的变量
typedef与指向结构体的指针
// 定义一个结构体并起别名
typedef struct{
typedef struct{
float x;
float y;
} Point;
// 定义了一个Point类型的指针并起起别名p1
typedef Point *p1;
float y;
} Point;
// 定义了一个Point类型的指针并起起别名p1
typedef Point *p1;
int main()
{
// 定义结构体变量
Point point = {10, 20}; //此处相当于下面代码
// struct {
// float x;
// float x;
// float y;
// } point = {10, 20};
// 定义指针变量
PP p = &point;//此处相当于下面代码
// Point *P = &point;
// 利用指针变量访问结构体成员
printf("x=%f,y=%f\n", p->x, p->y);
return 0;
}
typedef与指向函数的指针
格式:typedef 指针类型(*指针别名)(接受参数类型)
// 定义一个sum函数,计算a跟b的和
int sum(int a, int b) {
int c = a + b;
printf("%d + %d = %d", a, b, c);
return c;
}
int sum(int a, int b) {
int c = a + b;
printf("%d + %d = %d", a, b, c);
return c;
}
//给函数类型的指针起别名 MySum
typedef int (*MySum)(int, int);
typedef int (*MySum)(int, int);
int main() {
// 定义一个指向sum函数的指针变量p
MySum p = sum;
// 利用指针变量p调用sum函数
(*p)(4, 5);
return 0;
}