C语言总结 --- 构造数据类型
C 语言数据类型分为四大类基本数据类型short、int、long 、char、float、double、指针类型、构造数据类型结构体、共用体、枚举 、空类型 void一结构体1.声明结构体struct 名称{数据类型 成员1;数据类型 成员2;数据类型 成员3;};示例声明“struct 名称”的结构体类型是一种数据类型struct date{int year;int mon;int day;};struct time{int hour;int min;int sec;};struct datetime{int year;int mon;int day;int hour;int min;int sec;};struct datetime{struct date mdate;struct time mtm;};struct datetime{struct date{int year;int mon;int day;}mdate;struct time{int hour;int min;int sec;}mtm;};struct{int year;int mon;int day;};注意1声明结构体的时候结构体{}后面的“;”不能省略2结构体成员之间用“;”隔开3struct后面的“名称”可以省略省略后就是一个匿名结构体2.定义结构体变量int num;结构体类型 变量名;struct date mydate;struct{int year;int mon;int day;}mydate;声明结构体类型的同时定义了一个变量变量的变量名mydate3.初始化结构体1全部初始化struct date mydate {2007, 7, 7};struct datetime{struct date mdate;struct time mtm;};struct datetime mydt {{2007, 7, 7}, {14, 5, 23}};2部分初始化struct date mydate {.year 2024,.day 6,};4.访问结构体数据成员1通过结构体变量访问结构体成员结构变量变量名.成员1;结构变量变量名.成员2;结构变量变量名.成员3;结构变量变量名.成员1; //表达式的结果取决成员的数据类型mydate.year;mydate.mon;mydate.day;2通过结构体指针访问结构体成员结构体指针-成员1;结构体指针-成员2;结构体指针-成员3;结构变量变量名.成员1; //表达式的结果取决成员的数据类型5.结构体的存储方式1结构体对齐原则结构体成员在内存中存储时成员必须存储在自己字节大小的整数倍位置结构体整体占的内存大小是结构体中最大成员字节数的整数倍2注意在不同位系统下相同结构体在内存中占的字节空间可能不一样原因64位系统long/指针类型占8字节32位系统long/指针类型占4字节。可以强制让结构体按指定字节数对齐#pragma pack(1) //强制结构体按1字节对齐struct s{int a; //4char b; //1int c; //4};#pragma pack() //取消强制结构体按1字节对齐sizeof(s) ---9字节示例//12字节struct s1{short a;int b;char c;};//8字节struct s2{char a; //2 (0-1)short b; //2 (2-3)int c; //4 (4-7)};//64bit -- 24 //32bit--16struct s3{char a; //4 (0-3)int b; //4 (4-7)short c; //8 (8-15) //8-11long d; //8 (16-23) //12-15};//64bit 16 32bit--8struct s4{char a;int *p;};//24字节struct s5{char a[16]; //0-15char b; //16int c; //20-23};6.结构体作为函数参数传递如果要在被调函数中修改主调函数中的结构体变量则传递结构体变量的地址如果在被调函数中使用主调函数中定义的结构体变量可以值传递也可以传地址7.结构体数组struct 名称 数组名[元素个数];struct 名称 数组名[元素个数] {{} {} {}};数组名[下标]; ---》数据类型”struct 名称“ 类型结构体数组中的成员访问struct stu ss[4] {{zhangsan, 23, 90}, {lisi, 22, 67},{wanger, 24, 89}, {zhaowu, 20, 99}};void printf_stu_array(struct stu *ss, int len){for (int i 0; i len; i){//struct stuprintf(%s %d %d\n, ss[i].name, ss[i].age, ss[i].score);//struct stu *printf(%s %d %d\n, (ssi)-name, (ssi)-age, (ssi)-score);//struct stuprintf(%s %d %d\n, (*(ssi)).name, (*(ssi)).age, (*(ssi)).score);}}二共用体1.基本语法声明共用体union 名称{数据类型 成员1数据类型 成员2数据类型 成员3}定义共用体变量union 名称 变量名特点1共用体中的所有成员共用一块内存空间2共用体在内存中占的字节数取决于最大字节数的成员3共用体存储的数据和最后一次的成员赋值有关。2.内存大小段存储方式小端内存的高地址存储高字节位内存的低地址存储低字节位大端内存的高地址存储低字节位内存的低地址存储高字节位大小端测试方式指针方式int main(void){int a 0x11223344;char *p (char *)a;if (*p 0x44){printf(small\n);}else{printf(big\n);}}共用体方式union s{int a;char b;};int main(void){union s tmp;tmp.a 1;if (tmp.b){printf(small\n);}else{printf(big\n);}return 0;}三枚举基本语法枚举类型的声明enum 名称{枚举常量1枚举常量2枚举常量3}#define RED 0#define BLUE 1符号常量注意枚举里面的成员都是枚举常量都是整形常量所以不需要写数据类型枚举常量根据行业规范一般写成大写方式和普通变量区分枚举中的枚举常量类似于整形符号常量可以直接被引用枚举中的常量和常量之间用逗号隔开枚举中的枚举常量如果没有给定初始值则默认从0开始如果给其中的某个枚举常量给定了初始值则后面的常量以该值为基础自增1枚举变量enum 名称 变量名枚举变量是枚举类型但本质是一个整型变量名 枚举常量四typedef关键字typedef为已有的数据类型重命名typedef 已有的数据类型 新名字typedef enum week{MON 1,TUE,WED,THU,FRI,SAT,SUN,}WEEK_e;typedef struct stu{char name[32];int score;}STU_s;struct stu1{char name[32];int score;};typedef struct stu1 STU1_s;typedef union name{char a;int b;short c;}NAME_u;typedef unsigned int u32;typedef unsigned short u16;typedef unsigned char u8;typedef unsigned long u64;typedef signed int s32;

相关新闻

Dify 中级实验(05):并行执行——如何让多路任务同时跑?

Dify 中级实验(05):并行执行——如何让多路任务同时跑?

Dify 中级实验(05):并行执行——如何让多路任务同时跑? Dify 实验系列 中级 05/20 | 实验编号:DIFY-102-06 上篇:Dify 中级实验(04):迭代进阶——如何批量处理数据并守住…

2026/10/7 4:28:10 阅读更多 →
【信息科学与工程学】【通信工程】第八十七篇 通信网络解决方案中的学科知识01

【信息科学与工程学】【通信工程】第八十七篇 通信网络解决方案中的学科知识01

通信网络(含软件/通信设备、无线/有线硬件/电路、组网、网络拓扑)所依赖的数学 + 物理 + 信息论 + 密码学 + 集合论/离散数学学科地图 一、基础数学(编号 1–9:线性代数、概率、随机过程、矩阵分析等) 编号 学科(课程) 核心知识点 在通信网络中的作用 代表教材/资料…

2026/10/6 16:37:02 阅读更多 →
C++重定义错误全解析:从ODR规则到工程实践解决方案

C++重定义错误全解析:从ODR规则到工程实践解决方案

1. 项目概述:从一次编译报错说起如果你写过C,尤其是项目稍微复杂一点,把代码分到不同的.cpp和.h文件里,那你大概率见过这个老朋友:redefinition(重新定义)错误。它就像代码世界里一个脾气古怪的…

2026/10/7 14:40:02 阅读更多 →

最新新闻

Piik原生屏幕捕获实现:WGC、WebCodecs与跨平台采集架构解析

Piik原生屏幕捕获实现:WGC、WebCodecs与跨平台采集架构解析

Piik原生屏幕捕获实现:WGC、WebCodecs与跨平台采集架构解析 【免费下载链接】Piik Free, open-source screen sharing for private live streams with friends. Watch together in a browser or self-host Piik. 免费开源的私密屏幕共享,支持游戏直播、一…

2026/10/9 0:52:36 阅读更多 →
REA引擎选择三法:--provider参数、provider_id与REA_ANALYSIS_PROVIDER环境变量

REA引擎选择三法:--provider参数、provider_id与REA_ANALYSIS_PROVIDER环境变量

REA引擎选择三法:--provider参数、provider_id与REA_ANALYSIS_PROVIDER环境变量 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea REA 是…

2026/10/9 0:52:36 阅读更多 →
Flutter迁移OpenHarmony实战:文章详情页从0到1完整记录

Flutter迁移OpenHarmony实战:文章详情页从0到1完整记录

1. 项目概述1.1 核心需求解析先说结论:这是一次把 Flutter 应用跑到 OpenHarmony 设备上的完整实战,我挑的载体是一个口腔护理资讯类 App,核心功能集中在文章详情页的实现上。选择这个场景的原因很直接——文章详情页是内容型应用里面信息密度…

2026/10/9 0:52:36 阅读更多 →
模型服务规模化:调度、KV Cache 与资源池化的系统之道

模型服务规模化:调度、KV Cache 与资源池化的系统之道

SOSP 的 Session 1A 开场就是 Model Serving at Scale,这个安排本身就很能说明问题。这几年我和团队一直在做 LLM 推理服务化,眼看着这个方向从"AI 实验室里的小工具"变成了"真正意义上的系统软件"——调度、缓存、资源池化、故障恢…

2026/10/9 0:52:36 阅读更多 →
AI日报制作全攻略:从信息筛选到判断力训练的实操指南

AI日报制作全攻略:从信息筛选到判断力训练的实操指南

1. 一份“AI 日报”到底在记录什么每天早上打开电脑,我做的第一件事不是看邮件,而是花二十分钟把过去二十四小时里跟人工智能相关的动态过一遍。这个习惯坚持了快三年,从最开始只是随手记在备忘录里,到后来形成固定格式的日报&…

2026/10/9 0:52:36 阅读更多 →
光通信互联市场重构:数据中心光纤跳线选型与供应模式解析

光通信互联市场重构:数据中心光纤跳线选型与供应模式解析

数据中心机房扩建、企业园区网络改造以及高密算力集群的部署,将物理层布线推向了高频迭代周期。在采购决策过程中,网络工程师与采购团队往往试图通过检索各类口碑清单获取供应商参考。光通信布线涉及单模长距、多模短距互联以及高密MTP/MPO主干等多样化场…

2026/10/9 0:51:35 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/7 13:34:55 阅读更多 →