新闻详情

新闻详情

首页 / 资讯中心 / 详情

结构体详细集合

发布时间:2026/9/28 12:58:46来源:尧图网络
结构体详细集合
目录一.结构体的定义二.结构体的定义与声明1.常规方法2.匿名结构体3.嵌套结构体三.结构体的赋值1.定义时赋值初始化2.定义后逐个赋值四.结构体成员访问1.点操作符访问2.通过成员访问操作符访问五.结构体内存对齐1.为什么要内存对齐2.内存对齐规则一.结构体的定义1.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。2.结构体和其他类型基础数据类型一样即与数组整型int字符型插入等类型同级别。3结构体关键字struct 。二.结构体的定义与声明1.常规方法示例struct student { char name[20]; int age; char sex[20]; }; struct student a;这里我们定义了一个类型名为student 含有一个名为 name 字符型数组变量、 age 的整型变量 sex 的字符型数组变量 的结构体并成功声明student类型变量 a 。2.匿名结构体示例struct { char name[20]; int age; char sex[20]; }student;顾名思义我们定义的是一个没有类型名的结构体变量类型并同时声明了一个该类型的变量 student。注由此方式创建的结构体只能在定义时声明变量在定义之后无法再次声明变量。3.嵌套结构体嵌套可理解为镶嵌、套用。指在已有的表格、图像或图层中再加进去一个或多个表格、图像或图层亦或两个物体有装配关系时将一个物体嵌入另一物体的方法。嵌套结构体即将一个结构体嵌套进另一个结构体中。示例struct data { int year; int month; int day; }; struct student { char name[20]; int age; struct data da; }这里定义的结构体 student 中有另一个结构体 data 这就是结构体的嵌套。注结构体包含自身时便是结构体的自引用结构体需要自引用时选择指针的形式否则将无法为其分配内存空间。三.结构体的赋值1.定义时赋值初始化示例struct student { char name[20]; int age; char number[12]; }; int main() { struct student stu { 张三,18,11111111111 }; return 0; }打开监视器我们可以发现数据已经在变量声明的时候储存进去了。2.定义后逐个赋值示例struct student { char name[20]; int age; char number[12]; }; int main() { struct student stu; stu.age 18; sprintf_s(stu.name,张三); sprintf_s(stu.number, 11111111111); return 0; }由于时数据声明后挨个赋值所以无所谓赋值顺序了。四.结构体成员访问1.点操作符访问示例#includestdio.h struct student { char name[20]; int age; char number[12]; }; int main() { struct student stu { 张三, 18, 11111111111}; printf(名字%s,\n年龄%d,\n电话号码:%s, stu.name, stu.age,stu.number); return 0; }运行结果如下2.通过成员访问操作符访问注成员访问操作符的作用对象时指针。示例struct student { char name[20]; int age; char number[12]; }; int main() { struct student stu { 张三, 18, 11111111111}; struct student* pstu stu; printf(名字%s,\n年龄%d,\n电话号码:%s, pstu-name, pstu-age,pstu-number); return 0; }运行结果如下所示五.结构体内存对齐1.为什么要内存对齐a.硬件平台不一定能随意访问某个地址上的任意数据b.为了访问未对齐的内存处理器需要作两次内存访问而对齐的内存访问仅需要一次访问。为了提高效率需要进行内存对齐。2.内存对齐规则a.先进行结构体各成员对齐再进行结构体总对齐。b.结构体的第一个数据成员存放的地址为结构体变量偏移量为0的地址处即结构体起始位置。从第二个成员开始各成员自要对齐到该成员大小与默认对齐数中最小值的整数倍的偏移量处。结构体的大小为其最大成员大小的整数倍处。示例struct student { int a; short b; char c; };对于这个结构体首先进行结构体成员对齐第一个成员为整型数据大小为四字节所占内存为1234以结构体起始位置为1第二个成员为短整型数据大小为二字节对齐到偏移量为 4 的位置即第二个成员所占内存为 56。第三个成员为字符型数据大小为一字节对齐到偏移量为7。然后进行结构体总对齐易知该结构体中最大的数据为整型数据大小为4对齐后偏移量为8。由此可知该结构体的大小为8字节。具体大小我们可以通过运行代码验证#includestdio.h struct student { int a; short b; char c; }; int main() { printf(%zd, sizeof(student)); return 0; }运行结果如下
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Substrate实战指南:从零构建自定义区块链与运行时开发 2026/9/28 17:19:19

Substrate实战指南:从零构建自定义区块链与运行时开发

如果你做过以太坊合约开发,大概率会碰到过这种别扭的时刻:业务逻辑写到一定程度,就会撞上 EVM 的天花板——存储模型是全局的、计算是受限的、升级灵活性也要看链上治理的脸色。你想做的不是“在一条链上跑一个合约”,而是“让整条…

阅读更多 →
桌面智能体效率翻倍:技能化与项目化实战指南 2026/9/28 17:19:19

桌面智能体效率翻倍:技能化与项目化实战指南

1. 桌面智能体到底卡在哪一步桌面智能体这个概念,过去一年被聊得很多,但真正把它用起来的人并不多。我身边不少朋友都装过各种桌面端智能助手,刚开始新鲜两天,后面就变成桌面上的一个摆设。问题出在哪?不是模型不够聪明…

阅读更多 →
虚拟串口驱动VSPD安装配置与STM32 USB CDC实战指南 2026/9/28 17:19:13

虚拟串口驱动VSPD安装配置与STM32 USB CDC实战指南

1. 虚拟串口到底解决什么问题搞嵌入式开发或者工控上位机调试的朋友,大概率都遇到过这种尴尬:手头只有一台电脑,却要模拟两个设备之间的串口通信;或者代码写好了,但硬件还没到货,没法验证收发逻辑&#xff…

阅读更多 →
移动机器人底盘选型指南:10种结构运动学对比与实战避坑 2026/9/28 17:19:13

移动机器人底盘选型指南:10种结构运动学对比与实战避坑

1. 底盘选型这件事,为什么值得单独拿出来讲做移动机器人整机开发,底盘选型是第一个绕不开的岔路口。我见过太多团队在算法上投入了大量精力,SLAM跑得飞起,路径规划也调得不错,结果底盘运动学模型选错了,整个…

阅读更多 →
ax调度:面向agentic工作负载的Kubernetes编排原语 2026/9/28 17:19:13

ax调度:面向agentic工作负载的Kubernetes编排原语

1. 从“ax”这个标题说起:一个被低估的调度原语第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部代号。但把热搜词摊开来看——ax、agentic、orchestration、runtime、Kubernetes、ax调度、agentic rag、karmada、…

阅读更多 →
ax调度与agentic runtime:面向Agent工作负载的运行时编排实践 2026/9/28 17:19:12

ax调度与agentic runtime:面向Agent工作负载的运行时编排实践

1. 从"ax"这个标题说起:一个被低估的运行时调度命题第一次看到"ax"这个标题,很多人会一头雾水——两个字母,没有上下文,没有正文,没有关键词。但把相关热搜词摊开来看,方向其实非常清晰…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉