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 Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装