• C语言基础篇 —— 3-3 关键字 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;
    
    • 1
    • 2
    • 3
    • 4

    注意:
    当用#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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    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
    
    • 1
    • 2
    • 3

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

    使用typedef的意义

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

  • 相关阅读:
    2023-9-11 台阶-Nim游戏
    Java错题归纳day8
    LeetCode_88_合并两个有序数组
    如何实现实时音视频聊天功能
    k8s kubeadm配置
    ACM新手入门之杭电150题使用指南及C语言学习推荐
    【精选】VMware部署ESXI6.5 vCenter Server详解
    CoM-Px30|RK3358核心模板以太网通信测试
    【多线程】线程安全的单例模式
    【自定义类型】--- 位段、枚举、联合
  • 原文地址:https://blog.csdn.net/weixin_43564241/article/details/126675170