vlambda博客
学习文章列表

C语言自定义数据类型名称-typedef

「今天是学习C语言第 25 天」


当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch


# 自定义类型名称

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请赏个 赞    点击右下角 在看」