尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
关键字 typedef 用法详细解析
一 . typedef1.什么是typedeftypedef 是C语言中的一个关键字它的作用是给一个已经存在的类型起一个别名。typedef 可以为基本数据类型、自定义数据类型结构体、共用体、枚举类型、数组和指针定义简洁的类型名称。一旦用户在程序中定义了自己的数据类型名称就可以在该程序中用自己的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。typedef 在编译时处理有类型检查功能不同于 #define 的简单文本替换。typedef 可以增强程序的可读性和可移植性。2.typedef 用法1.基本数据类型的重定义示例#includestdio.h typedef int i; typedef char ch; typedef long long int li; int main() { i a 5; li b 10; ch c a; printf(%d\n, a); printf(%lld\n, b); printf(%c\n, c); return 0; }运行结果如下图所示在这里我们将 int、char、long long int 分别重定义为i、ch、li并通过新的类型名声明变量 a,b,c 由此我们可以知道当使用 typedef 定义类型名后我们可以使用新的类型名声明与原类型名声明的变量相同的变量。注使用 typedef 定义类型名后原类型名作用不变。2.自定义数据类型重定义a.结构体示例#includestdio.h struct student { char name[20]; int age; char sex[7]; }; typedef struct student stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }运行结果如下图所示在这里我们对结构体 struct student 重定义为stu 并通过 stu 声明变量 a 并进行初始化。我们也可以在结构体定义时进行重定义如下#includestdio.h typedef struct student { char name[20]; int age; char sex[7]; }stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }此时结构体变量 第一个名称可以省略如下#includestdio.h typedef struct { char name[20]; int age; char sex[7]; }stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }b.共用体共用体的重定义与结构体相似示例#includestdio.h union un { char a; int b; }; typedef union un u; int main() { u b {0}; b.a a; printf(%d, b.b); return 0; }运行结果如下图在这里我们对共用体 union un 重定义为 u 并通过 u 声明变量共用体变量 b 并进行初始化。我们也可以像结构体一样在定义共用体时进行重定义如下#includestdio.h typedef union un { char a; int b; }u; int main() { u b { 0 }; b.a a; printf(%d, b.b); return 0; }c.枚举变量示例#includestdio.h enum week { one 1, two, three, four, five, six, seven }; typedef enum week w; int main() { w a one; printf(%d, a); return 0; }在这里我们定义枚举类型 week 后对 week 进行重定义为 w 并通过 w 声明枚举变量 a 并进行初始化。运行结果如下图同时也可以像共用体和结构体一样在定义枚举类型时进行重定义如下#includestdio.h typedef enum week { one 1, two, three, four, five, six, seven }w; int main() { w a one; printf(%d, a); return 0; }3.数组的重定义示例#includestdio.h typedef int (i)[5]; int main() { i a { 1,2,3,4,5 }; printf(%d, *(a2)); return 0; }结果如下图所示在这里我们将包含五个整型的数组重定义为i 并通过 i 声明枚举变量 a 并进行初始化。4.函数的重定义示例#includestdio.h int fun(void) { return 20; } typedef int(f)(void) ; int main() { f* a fun; printf(%d, (a())); return 0; }结果如下图所示这里我们定义一个返回整型并且无参数的函数类型为 f 通过 f 声明一个函数变量并赋值为fun。5.指针的重定义a.指针示例#includestdio.h typedef int* i; int main() { int a 0; i b a; printf(%d, *b); return 0; }运行结果如下图这里我们将 int* 类型重定义为 i并通过 i 声明整型指针变量 b 并将整型变量 a 的地址赋给 b。b.数组指针重定义示例#includestdio.h typedef int(*i)[5]; int main() { int a[5] { 1,2,5,6,9 }; i b a; printf(%d, *((*b)3)); return 0; }运行结果如下图这里我们将指向包含五个整型的数组的指针重定义为 i 通过 i 声明 数组指针变量 b并赋值为数组a的地址。c.指针数组的重定义指针数组顾名思义就是包含多个指针的数组。#includestdio.h typedef int* i[5]; int main() { int a 10, b 20, c 30; i arr { a,b,c }; printf(%d\n, **arr); printf(%d\n, **(arr1)); printf(%d\n, **(arr2)); return 0; }运行结果如下图所示这里我们对指针数组重定义为 i 通过 i 声明变量 arr 并初始化为 a, b, c。d.函数指针示例#includestdio.h int fun(void) { return 20; } typedef int( *f)(void) ; int main() { f a fun; printf(%d, (a())); return 0; }返回值如下图这里将返回值为 int 整型并且没有参数的函数类型重定义为 *f即 f 为指向函数的指针类型并将函数 fun 赋给函数变量 a 。3.注意事项1.小心typedef的陷阱我们先看一个简单的代码#includestdio.h typedef int* i; int main() { int a 10; const i b a; return 0; }对于这个代码我们会下意识的认为 const 的用法 “左定值有定向”所以这个代码相当于 “const int * b”实则不然typedef 不同于宏不是简单的字符替换这个代码相当于 int * const b; 。2).对于多个储存类关键字在语法上typedef 不没有储存类功能但在语法上属于储存类关键字因此下图这种情况是错误的typedef static int a;在这里typedef 占据了储存类关键字的位置不再允许其他储存类关键字的出现。
RELATED

相关推荐

#define和#、##、@#解析:

#define和#、##、@#解析:

目录 前言: 1.什么是预处理: 2.#define是什么: 一.关于#define: 1).#define 的标识符定义: 2).#define 的函数定义: 3)#define 的续行操作: 4)#define…

📅 2026/9/28 6:05:57
NewsBlur 自托管部署与 MCP 智能体接入完整指南:从 Docker Compose 到 AI 阅读助手

NewsBlur 自托管部署与 MCP 智能体接入完整指南:从 Docker Compose 到 AI 阅读助手

后端前端社交人工智能 【免费下载链接】NewsBlur NewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument. 项目地址: https://gitcode.com/gh_mirrors/ne/NewsBlur 点击查看 免费下载 本文基…

📅 2026/9/28 6:05:57
Markdown开发VSCode插件推荐:用TaoToken统一Key打通AI写作与预览链路

Markdown开发VSCode插件推荐:用TaoToken统一Key打通AI写作与预览链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/28 6:05:57
MORE NEWS

更多资讯

📰

VisionTransformer图像去雾:Python源码与实战解析

简介:图像去雾是典型的病态反问题,传统方法依赖暗通道先验估计透射率,在天空、白墙等区域容易失效。VisionTransformer凭借全局自注意力机制,能够有效建模长程依赖,对不均匀雾和复杂场景表现出更强的稳定性。本文从大气…

📰

Midway @midwayjs/axios 组件演进与实战:从 HTTP 客户端组件诞生到 axios v1 的完整解析

后端微服务云原生 【免费下载链接】midway 🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate w…

📰

Mist 项目贡献指南:从 Bug 报告到 Pull Request 的协作规范与工程实践

区块链Web3桌面应用 【免费下载链接】mist [DEPRECATED] Mist. Browse and use apps on the Ethereum network. 项目地址: https://gitcode.com/gh_mirrors/mi/mist 点击查看 免费下载 本指南以 Mist(Ethereum Wallet)仓库的 CONTRIBUTING.m…

📰

Java宠物管理系统:数据库设计与JDBC实战全流程

简介:面向Java课程设计、毕业设计或综合实训场景,一份包含宠物管理系统完整开发流程的项目资料包,覆盖从环境配置、数据库设计到前后端联调与答辩展示的全过程。压缩包约136.77MB,内含源代码、数据库脚本、项目报告、答辩PPT、运行…

📰

YOLO卫星遥感目标检测实战:1825张标注图入门指南

简介:本资源是面向YOLO系列目标检测算法研究与工程实践的卫星遥感图像专用数据集,适用于高校遥感AI方向学生、计算机视觉初学者及工业级模型训练需求者,解决小目标、低分辨率遥感场景下通用数据集适配性差的问题。压缩包共2000个文件&#xf…

📰

STM32软件模拟IIC驱动TM1680数码管的精准时序实现

1. 项目概述:为什么非得“手把手”用软件模拟IIC驱动TM1680?STM32做数码管/LED点阵驱动时,很多人第一反应是找现成的IIC硬件外设——毕竟HAL库里HAL_I2C_Master_Transmit()一行调用就完事。但真到TM1680这种国产LED驱动芯片上,你会…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬