C语言自定义数据类型名称-typedef
「今天是学习C语言第 25 天」
# 自定义类型名称
C语言不仅内置int,float,char,函数,指针等多种数据类型,也提供typedef关键字用于创建新的数据类型名称,方便自定义数据类型。
自定义数据类型的使用和内置数据类型一样,无任何区别。
注:本质上typedef没有创建新的类型,只是增加了新的类型名称。
# typedef使用语法
语法:
typedef 已有类型名称 新类型名称
例如:
typedef int MyInterger;
MyInterger i,j; // 与int i,j 等价
// 自定义char *类型名Mystring
typedef char *MyString;
char *s;
MyString s; // 等价上面
# typedef 简化结构类型应用
使用typedef可以简化结构类型名称,起名也可以增加代码可读性。
// 自定义结构类型名称
typedef struct node
{
.....
}MyNode;
struct node node1;
MyNode node1; // 等价上面
// 自定义结构指针类型
typedef struct node *NodePtr;
struct node *p;
NodePtr p; // 等价上面
# 自定义函数类型指针名称
typedef定义一个指向一类函数的指针。
例如:
typedef int (*FunPtr)(int , int );
FunPrt f1,f2;
说明:
1.FunPtr是函数指针类型,该函数类型是返回值为int,参数为两个int型的函数;
2.f1,f2是两个函数指针类型变量。
# typedef的作用
1.简化代码,增强可读性;
2.将程序机器相关的内置类型参数化,提高可移植性,例如不同平台上的内置数据类型是不一样的,程序移植到不同平台时,只需要typedef定义即可,其它位置无需一一修改。
例如:
typedef int MyInteger; 如果A平台不支持int型,只支持long类型,我们可以简单修改定义 typedef long MyInterger; 即可,程序代码无需修改。
# typedef vs #define
#define基本上可以实现typedef的类似功能,为各种数据类型自定义名称。
例如:
#define MyInteger int
#define MyString char *
区别:
1.#define是预处理指令,预处理器处理,typedef是关键字由编译器编译处理。
2.typedef是完整的自定义类型名称,声明变量保证变量类型一致,#define只是简单的文本替换,在不同位置会产生不同的类型。
例如:
#define MyString char *
MyString p1,p2;
宏替换以后是 char * p1, p2; 其中p1是字符指针类型,p2是字符类型。
3.typedef 自定义类型后,无法添加unsigned,signed等类型区分符,#define可以。
4.#define 可以为类型关键字、字符串、整数等几乎任何类型自定义别名,宏替换。
---------- End ----------
往期精彩推荐:
「喜欢C请赏个 赞 点击右下角 在看」