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/8/8 7:16:59 阅读更多 →
【信息科学与工程学】【通信工程】第八十七篇 通信网络解决方案中的学科知识01

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

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

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

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

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

2026/8/8 7:16:59 阅读更多 →

最新新闻

终极本地AI视频剪辑方案:FunClip完整指南

终极本地AI视频剪辑方案:FunClip完整指南

终极本地AI视频剪辑方案:FunClip完整指南 【免费下载链接】FunClip FunASR-powered video transcription, subtitle generation, and LLM-assisted clipping tool with a local Gradio UI. 项目地址: https://gitcode.com/GitHub_Trending/fu/FunClip 还在为…

2026/8/8 9:17:49 阅读更多 →
《骑马与砍杀2》MOD制作入门:从零修改游戏数据与创建新兵种

《骑马与砍杀2》MOD制作入门:从零修改游戏数据与创建新兵种

1. 项目概述:从玩家到创作者的转变 如果你和我一样,在《骑马与砍杀2:霸主》里已经统一了卡拉迪亚大陆好几遍,刷遍了所有兵种树,甚至对每个领主的性格都了如指掌,那么“自制一个简单MOD”这个念头&#xff0…

2026/8/8 9:17:49 阅读更多 →
DSGE模型信息缺失处理与Matlab鲁棒预测框架

DSGE模型信息缺失处理与Matlab鲁棒预测框架

1. 项目概述:当DSGE模型遇上信息缺失 在宏观经济分析领域,动态随机一般均衡(DSGE)模型长期被视为政策制定的"黄金标准",但传统建模方法存在一个致命软肋——它们假设经济主体掌握完整市场信息。这种理想化假…

2026/8/8 9:17:49 阅读更多 →
告别输入法词库迁移烦恼:深蓝词库转换工具终极指南

告别输入法词库迁移烦恼:深蓝词库转换工具终极指南

告别输入法词库迁移烦恼:深蓝词库转换工具终极指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾经因为更换输入法而不得不放弃积累了多年的个…

2026/8/8 9:17:49 阅读更多 →
非科班转行前端开发:6个月系统学习路径与全栈项目实战指南

非科班转行前端开发:6个月系统学习路径与全栈项目实战指南

1. 这篇文章真正要解决的问题 当“98年,从建筑行业裸辞的我...”这个标题出现在技术社区时,它背后指向的,远不止一个简单的转行故事。它揭示了一个在当下越来越普遍,却依然充满挑战的现实: 一个非科班出身的“大龄”新…

2026/8/8 9:17:49 阅读更多 →
从电商漏洞单事件解析高并发系统设计:缓存、风控与分布式事务实战

从电商漏洞单事件解析高并发系统设计:缓存、风控与分布式事务实战

最近想换手机的朋友,尤其是关注性价比和性能的开发者,可能都刷到过“小程序下单”购买 realme 真我 GT8 的消息。一个看似诱人的“漏洞单”,背后折射出的其实是电商平台、品牌方与羊毛党之间一场无声的攻防战。对于技术人来说,这不…

2026/8/8 9:16:49 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/7 23:54:54 阅读更多 →
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/7 17:02:36 阅读更多 →