快捷搜索: 王者荣耀 脱发

C语言基础篇 (十一)关键字 typedef


typedef关键字的含义

typedef是C语言中一个关键字,作用是用来定义(重命名类型)

C语言为什么要存在typedef关键字?这关键字存在的意义是啥? 在C语言中的类型有2种(内建类型ADT,自定义类型UDT): 第一种是C语言编译器中特有的类型(char/int/double等) 第二种是用户自定义的类型,不是语言自带的是程序员自定义类型(数组类型,结构体类型,函数类型等) 在编程中有的时候使用的自定义类型太长了,用起来不方便。就用到typedef进行重命名为一个短点名字。 typedef是给类型重命名的,也就是说typedef加工出来的都是类型,而不是变量。

typedef与#define宏的区别

#define dpChar char *                 
typedef char * tpChar 				—— 重命名类型
dpChar *p1,p2; 					// 展开:char *p1,p2;      char *p1;char p2;
tpChar *p1,p2;                	// 等价:char *p1; char *p2;

注意: 当用#define去重命名变量类型时,只有p1定义为指针,而p2定义为char型变量。这是由于编译器在预处理阶段就会将代码中的dpChar地方原原本本的替换成char *,其他都不会改变。所以会出现两种定义不一样的现象。 typdef关键字不是在编译器预处理阶段替换的,他会在编译阶段以重命名类型的方式替换。

typedef与结构体

C语言中typedef与结构体结合使用是最常见的。这里列举几种常见的typdef重命名方式以及定义、赋值、使用的过程。

// 重命名
typedef struct
{
          
   
float   fTemperature;   
uint8_t ucHumidity;            

void (*Measure_Period_Mode)(void);  
}SHT30_t;

 // 方式一 定义并赋值
 SHT30_t SHT30 = 
{
          
   
0.0,
0,
Measure_Period_Mode
};

// 方式二  定义并赋值   
SHT30_t SHT30;                     // 结构体变量
SHT30.fTemperature = 0.0;
SHT30.ucHumidity = 0;
SHT30.Measure_Period_Mode = Measure_Period_Mode;

// 方式三 定义并赋值   
SHT30_t *SHT30;                    // 结构体指针
SHT30->fTemperature = 0.0;
SHT30->ucHumidity = 0;
SHT30->Measure_Period_Mode = Measure_Period_Mode;

// 在重命名结构体时,命名了两种:SHT30_t结构体类型,*pSHT30_t结构体指针类型
typedef struct
{
          
   
float   fTemperature;   
uint8_t ucHumidity;            

void (*Measure_Period_Mode)(void);  
}SHT30_t,*pSHT30_t;

// 使用结构体指针类型定义
pSHT30_t = &SHT30;

typedef与const结合

typede int* PINT;			const PINT p2;         	// 相当于int *const p2
typede int* PINT;			PINT const p2;  		// 相当于int *const p2
typede const int* PINT;     PINT p2;				// 相当于const int * p2

注意: typedef和const结合的时候第一种和第二种方式使用的方式,const修饰的都是p2指针。只有第三种方式const才能修饰p2指针所指向的那个内存值。

使用typedef的意义

1、简化类型的描述,尤其在函数指针中的使用 2、在很多编程体系下,人们倾向于不使用Int、double等C语言内建类型,因为这些类型本身和平台有关的。(如int在32位和64位中位数是不一样的)为了解决问题,很多程序使用自定义中间类型来缓冲使用。这样在将32位中的程序移植到64位的系统中时,只要更改重定义就完美解决问题。特别是在linux复杂程序中使用很广。

经验分享 程序员 微信小程序 职场和发展