C语言中typedef的四种用法(附带详细解析!!)

2024-06-07 23:44

本文主要是介绍C语言中typedef的四种用法(附带详细解析!!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1)typedef基本数据类型取“别名”

typedef unsigned int size;
typedef unsigned int16 u16;
typedef unsigned int8 u8;

2)typedef为自定义数据类型取“别名”

typedef struct{menu_f btn1; // make arraymenu_f btn2;menu_f btn3;draw_f draw;itemLoader_f loader;
}menuFuncs_t;
typedef enum
{DISPLAY_DONE,DISPLAY_BUSY,
//	DISPLAY_TOOFAST
} display_t;
其中,枚举类型名 表示定义的枚举类型的名称,枚举常量1、枚举常量2 等表示枚举类型中的常量。
每个枚举常量都有一个整数值,它们的默认值从 0 开始,依次递增 1

typedef为数组取“别名”

typedef char arr_name[20];

这是一个 C 语言中的类型定义语句,用于定义一个名为 arr_name 的数组类型,数组元素类型为 char,数组长度为 20。

具体来说,typedef char arr_name[20]; 定义了一个名为 arr_name 的数组类型,它包含了 20 个 char 类型的元素。通过这个类型定义,你可以使用 arr_name 来声明一个长度为 20 的字符数组,而不必每次都写出完整的数组声明语句。

例如,使用这个类型定义可以这样声明一个长度为 20 的字符数组:

arr_name my_array;

这样就等同于以下完整的数组声明:

char my_array[20];

这种类型定义可以使代码更加简洁和易读,特别是在多处需要声明相同类型的数组时。

4)typedef为指针取“别名”

typedef void (*display_f)(void);

这是一个 C 语言中的类型定义语句,用于定义一个函数指针类型 display_f。具体来说,display_f 是一个指向无返回值、无参数的函数的指针类型。

在这个类型定义中,typedef 关键字用于定义一个新的类型名 display_f,它是一个函数指针类型。函数指针类型是指可以指向函数的指针类型,它可以用于将函数作为参数传递给其他函数,或者将函数作为返回值返回。

这个类型定义语句的语法如下:

typedef 返回类型 (*指针变量名)(参数列表);

其中,返回类型 表示函数的返回值类型,参数列表 表示函数的参数列表,指针变量名 表示定义的函数指针类型的名称。

因此,typedef void (*display_f)(void); 定义了一个名为 display_f 的函数指针类型,它可以指向一个无返回值、无参数的函数。在实际使用中,可以使用 display_f 类型来声明函数指针变量,并将其指向一个符合要求的函数。例如:

void my_display() {printf("Hello, world!\n");
}int main() {display_f display_ptr = my_display; // 将函数指针指向 my_display 函数display_ptr(); // 调用函数指针,输出 "Hello, world!"return 0;
}

在这个示例中,display_ptr 是一个 display_f 类型的函数指针变量,它被赋值为 my_display 函数的地址。然后,通过调用 display_ptr() 来调用 my_display 函数,输出 “Hello, world!”。

这篇关于C语言中typedef的四种用法(附带详细解析!!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040643

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的