C语言自定义类型综合学习笔记
职坐标学习 C语言自定义类型综合学习笔记这份笔记涵盖了结构体、枚举和联合体的核心概念、用法及内存布局细节特别对结构体部分进行了深度扩展。️ 结构体 (Struct)结构体是 C 语言中实现“对象”概念的基础它允许我们将不同类型的数据打包在一起形成一个“复合类型”。1. 概念速览是什么一种用户自定义的数据类型用于描述具有多个属性的实体如学生、商品、坐标点。核心价值数据封装。让代码更有组织性避免使用大量零散的变量。生活类比结构体类型档案袋模板说明里面要装什么文件。结构体变量一个具体的档案袋实例某个学生的档案。成员变量档案袋里的具体文件身份证、成绩单。2. 结构体类型的声明声明结构体就是设计一个“蓝图”告诉编译器这个新类型包含哪些数据。基本语法1struct 结构体标签名 { 2 成员列表; 3}; // 注意这里的分号不能丢成员类型多样性结构体的成员非常灵活可以是基本类型int,char,float,double等。数组如char name[20];或int scores[3];。其他结构体可以在一个结构体中嵌套另一个结构体需提前声明。指针如char *ptr;。优化写法 (typedef)为了简化代码通常配合typedef使用给结构体起一个别名这样定义变量时就不需要每次都写struct关键字了。1typedef struct Student { 2 char name[20]; 3 int age; 4} Stu; // 以后可以用 Stu 代替 struct Student 5 6// 使用 7Stu s1;3. 结构体变量的定义、初始化和成员访问有了蓝图类型我们就可以盖房子定义变量了。定义变量1struct Student s1; // 定义一个结构体变量 2struct Student arr[3]; // 定义结构体数组 3struct Student *p s1; // 定义结构体指针初始化方式逐个赋值定义后通过.运算符一个个赋值。注意如果成员是数组如name不能直接s1.name 张三必须使用strcpy(s1.name, 张三);。整体初始化定义时按顺序struct Student s {张三, 18};指定成员C99标准struct Student s {.age18, .name张三};顺序可以打乱代码可读性更高。整体赋值变量间同类型的结构体变量可以直接互相赋值s2 s1;内存会进行逐字节拷贝。成员访问结构体变量使用点运算符.。例如s1.age 18;结构体指针使用箭头运算符-。例如p-age 18;等价于(*p).age。4. 结构体传参当结构体作为函数参数时有两种主要方式性能和安全性截然不同。传参方式描述优缺点建议值传递将结构体的副本传递给函数。优函数内修改不影响原数据安全。缺若结构体很大复制过程消耗大量时间和内存低效。仅在结构体很小且需要保护数据时使用。地址传递 (指针)将结构体的地址传递给函数。优无需复制速度极快节省内存。缺函数内可以直接修改原数据有风险。强烈推荐。处理大型结构体时的标准做法。最佳实践只读场景如果你希望通过指针传递以提高效率但又不希望函数修改原数据可以使用const修饰1void PrintStudent(const struct Student *ps) { 2 // ps-age 20; // 编译器会报错保护了数据不被修改 3 printf(%s, ps-name); 4}5. 结构体的自引用这是实现复杂数据结构如链表、树的核心技术。概念在结构体内部包含一个指向自身类型的指针。正确写法1struct Node { 2 int data; // 数据域 3 struct Node *next; // 指针域指向下一个同类型的结构体 4};错误写法常见坑1struct Node { 2 int data; 3 struct Node next; // 错误这会导致无限递归定义编译器无法计算大小 4};应用场景链表通过next指针将多个节点串联起来。遍历逻辑1struct Node *current head; // 指向第一个节点 2while (current ! NULL) { 3 printf(%d , current-data); 4 current current-next; // 指针移向下一个节点 5}6. 补充结构体内存对齐虽然文档中将其列为独立章节但它直接影响结构体的大小和性能必须掌握。现象sizeof(结构体)的大小通常大于所有成员大小之和。原因CPU 读取内存时按“块”读取如 4 字节或 8 字节对齐效率最高。为了对齐编译器会在成员之间插入“填充字节”。计算规则第一个成员在偏移量为 0 的地址。其他成员要对齐到“对齐数”的整数倍地址对齐数 编译器默认值与该成员大小的较小值。结构体总大小必须是最大对齐数的整数倍。优化技巧尽量按照成员大小从大到小或从小到大排序定义可以减少内存空洞节省空间。浪费空间char a; int b; char c;(可能占用 12 字节)节省空间int b; char a; char c;(可能占用 8 字节) 枚举 (Enum)1. 概念速览是什么用于定义一组具名整数常量的数据类型。核心价值提高代码可读性和可维护性避免使用“魔术数字”。2. 基础语法定义格式1enum 枚举名 { 2 枚举值1, // 默认从0开始 3 枚举值2, // 默认递增 4 枚举值3 100 // 可手动指定值 5};特性枚举值本质是整数int。可以进行比较和运算如today 1。3. 使用场景状态/类型如星期、季节、性别。错误码如SUCCESS,FILE_NOT_FOUND。选项如颜色RED,GREEN,BLUE。 联合体 (Union)1. 概念速览是什么一种特殊的数据类型允许不同的数据类型共享同一块内存空间。核心特点共享内存所有成员共用一段内存修改一个成员会影响其他成员。大小计算联合体的大小至少是最大成员的大小需考虑内存对齐。2. 基础语法定义格式1union 联合名 { 2 类型 成员1; 3 类型 成员2; 4};3. 注意事项数据覆盖同一时刻只能存储其中一个成员的值。应用场景通常用于底层开发、硬件接口或需要节省内存且互斥数据的场景。 核心知识点速记卡知识点一句话总结注意事项结构体定义struct 名 {成员};结尾分号不能丢成员可以是任意类型。成员访问普通变量用.指针用-。指针访问时ptr-name等价于(*ptr).name。结构体传参推荐使用指针传递。值传递会复制整个结构体大结构体效率低。内存对齐空间换时间提高CPU访问效率。调整成员顺序小到大或大到小可节省空间。枚举具名的整数常量。默认从0开始本质是int可参与运算。联合体成员共享同一块内存。大小由最大成员决定修改一个会影响其他。自引用结构体包含指向自己的指针。是实现链表的基础成员必须是指针类型。⚠️ 避坑指南结构体自引用错误❌ 错误struct Node { int data; struct Node next; };无限递归编译报错✅ 正确struct Node { int data; struct Node *next; };指针大小固定联合体数据污染给union的int成员赋值后再读取char成员得到的不是转换后的值而是内存截断后的解释需谨慎使用。内存对齐误区不要以为char int char就是1416字节实际可能是 12 字节取决于对齐规则。枚举赋值虽然枚举本质是整数但建议赋值时使用枚举常量如today MONDAY而不是直接赋整数如today 1以保持代码可读性。

相关新闻

2026轻量化快速部署的中小企业官网制作哪家好?如何搭建网站?

2026轻量化快速部署的中小企业官网制作哪家好?如何搭建网站?

2026轻量化快速部署的中小企业官网制作哪家好?如何搭建网站? 先看一组数据。据行业研究显示,2026年国内企业建站市场规模已达1120亿元,高端定制化建站需求占比高达72%。另有数据显示,2026年中国自助建站市场规模达286…

2026/8/1 10:02:39 阅读更多 →
STM32固件加密实战:基于UID与OTP的硬件绑定方案

STM32固件加密实战:基于UID与OTP的硬件绑定方案

1. 项目概述:为什么STM32固件加密是产品安全的基石在嵌入式产品开发中,尤其是基于STM32这类广泛应用MCU的项目,我们常常面临一个现实问题:如何保护我们投入了大量心血的固件代码?你辛辛苦苦调试好的算法、精心设计的业…

2026/8/1 10:01:39 阅读更多 →
设备轴磨损修复新方案:细碎机轴承位在线修复实操案例

设备轴磨损修复新方案:细碎机轴承位在线修复实操案例

关键词:细碎机、细碎机轴磨损,细碎机轴承位磨损,超聚物碳复合材料、汉瑞博技术 一、细碎机轴径磨损原因分析 (1)正常金属疲劳磨损:由于设备处于一种高载荷的工作状态,金属本身的金属疲劳特性在一…

2026/8/1 10:01:39 阅读更多 →

最新新闻

动画翻译偏差分析:从MLP国配案例看文化适配与术语统一

动画翻译偏差分析:从MLP国配案例看文化适配与术语统一

《我的小马驹:友谊就是魔法》(My Little Pony: Friendship is Magic,简称MLP)第一季的国语配音版自播出以来,凭借优秀的本土化翻译和配音收获了众多粉丝的喜爱。不过,在重温经典的过程中,一些细…

2026/8/1 10:33:49 阅读更多 →
CNKI-download知网文献批量下载:5分钟快速上手终极指南

CNKI-download知网文献批量下载:5分钟快速上手终极指南

CNKI-download知网文献批量下载:5分钟快速上手终极指南 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 想要高效获取知网学术文献…

2026/8/1 10:33:49 阅读更多 →
CreBee vs 蚁小二 vs 易媒助手:2026新媒体矩阵工具深度对比,企业应该如何选择?

CreBee vs 蚁小二 vs 易媒助手:2026新媒体矩阵工具深度对比,企业应该如何选择?

随着企业新媒体运营进入矩阵化阶段,“运营一个账号”的时代正在过去,现在越来越多企业正在管理:多个公某号、多个视某号、某音、小某书、某手账号、某乎、某站、某条等内容渠道。过去,一个运营人员可以靠Excel记录账号状态。但当账…

2026/8/1 10:33:49 阅读更多 →
美师美课音乐艺考:艺考高分差距在哪?先看这几点

美师美课音乐艺考:艺考高分差距在哪?先看这几点

每年河北音乐艺考结束后,都会出现很奇怪的现象:很多日常刻苦练习、专业功底扎实的考生,统考成绩平平;反而有些看似日常练习不算极致的考生,最终拿下高分、成功逆袭。真正的艺考差距,藏在小三门的稳定高分和…

2026/8/1 10:33:49 阅读更多 →
终极免费开源Windows屏幕标注神器:ppInk完整使用指南与教程

终极免费开源Windows屏幕标注神器:ppInk完整使用指南与教程

终极免费开源Windows屏幕标注神器:ppInk完整使用指南与教程 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否曾在在线会议、远程教学或产品演示中,需要快速在屏幕上标注重点却找不到合适的工具&…

2026/8/1 10:33:49 阅读更多 →
树莓派CM4转CM3转接板设计:硬件降维实战与信号完整性解析

树莓派CM4转CM3转接板设计:硬件降维实战与信号完整性解析

1. 项目概述:从CM4到CM3,一次硬件降维的深度探索 最近在折腾一个老项目,需要用到树莓派CM3模块,但手头只有几块闲置的树莓派CM4。直接买新的CM3?成本不低,而且项目对性能要求不高,CM4的性能完全…

2026/8/1 10:32:49 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →