news 2026/4/23 17:50:06

C语言 结构体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言 结构体

本文介绍了C语言中结构体的基本概念和使用方法。主要内容包括:1.结构体声明语法和成员访问方式;2.结构体内存对齐规则及其对空间利用的影响;3.通过示例展示了不同成员排列顺序对结构体大小的影响;4.结构体位段的使用方法及其与普通结构体的区别;5.位段的内存分配特点和使用注意事项,包括其不跨平台的特性和内存地址限制。文章强调结构体传址调用的优势,并指出合理排列成员变量可以优化内存空间利用。

结构体的声明

结构体属于自定义类型 C语言中有结构体 枚举 联合体

struct
{
成员变量;
}结构体变量;

.访问成员变量

间接访问->

指针->成员变量
匿名对象
只可以使用一次

想使用匿名对象 需要重名 使用里面的成员变量 直接引用

结构自引用

定义结构体不要使⽤匿名结构体了
在匿名对象中 提前使用名字来访问是不对的

结构体内存对⻬

对齐规则

1一个成员变量到起始地址的偏离量为0

2其他成员变量要对齐(对齐数)的整数倍的地址处

3整个结构体的最大对齐数等于 成员变量的最大对齐数

4重叠结构体

对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。

vs默认为8

练习

/练习1
structS1
{
charc1;
inti;
charc2;
};
printf("%d\n",sizeof(structS1));
//练习2
.......
structS2
{
charc1;
charc2;
inti;
};
printf("%d\n",sizeof(structS2));
//练习3
structS3
{
doubled;
charc;
inti;
};
printf("%d\n",sizeof(structS3));
总大小为16个字节
//练习4-结构体嵌套问题
structS4
{
charc1;
structS3 s3;
doubled;
};
printf("%d\n",sizeof(structS4));
同一类型的数值最好放在一起 节约空间 像S1和S2一样 不同顺序 结果不同
结构体的内存对⻬是拿空间来换取时间的做法
#pragma pack()
#pragma pack()修改对齐数
而单独的pramga pack()恢复默认的对齐数
结构体传址调用
传址调用比传值调用大大节约了空间
结构体传参的时候,要传结构体的地址。

结构体实现位段

位段是成员变量 :数字 形式

内存分配

1.位段的成员可以是int unsigned int signed int或者是char等类型
2.位段的空间上是按照需要以4个字节(int)或者1个字节(char)的⽅式来开辟的。
3.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使⽤位段。
vs在同一空间是从右向左存比特位 如果开辟一个不足则不要了 重新开辟一个
与结构相比 更省空间 但 有风险

位段使⽤的注意事项

位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位
置处是没有地址的。内存中每个字节分配⼀个地址,⼀个字节内部的bit位是没有地址的。
所以不能对位段的成员使⽤&操作符,这样就不能使⽤scanf直接给位段的成员输⼊值,只能是先输⼊
放在⼀个变量中,然后赋值给位段的成员。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:57:15

【2025最新】基于SpringBoot+Vue的房屋交易平台管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展,房地产行业逐渐向数字化、智能化转型,传统的房屋交易方式已无法满足现代用户的需求。房屋交易平台管理系统通过整合线上资源,为用户提供便捷的房产信息查询、交易撮合、合同管理等功能,极大地提升…

作者头像 李华
网站建设 2026/4/23 12:14:32

SpringBoot+Vue +乡政府管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着信息技术的快速发展,数字化管理在基层政府工作中发挥着越来越重要的作用。乡政府作为基层治理的核心单位,其管理效率和服务水平直接影响农村地区的可持续发展。传统的乡政府管理方式依赖纸质档案和人工操作,存在信息滞后、效率低下…

作者头像 李华
网站建设 2026/4/22 20:25:02

Java 8 Stream API 深度解析:从入门到精通

一、Stream API 概述1.1 什么是 Stream APIJava 8 引入的 Stream API 是处理集合数据的革命性特性,它允许开发者以声明式的方式处理数据集合,支持并行操作,极大地提高了代码的可读性和执行效率。核心特点:声明式编程:描…

作者头像 李华
网站建设 2026/4/23 12:15:40

MedGemma X-Ray医疗AI落地:符合DICOM基础规范的轻量级方案

MedGemma X-Ray医疗AI落地:符合DICOM基础规范的轻量级方案 1. 为什么需要一款“懂X光”的轻量级医疗AI? 在放射科日常工作中,一张标准胸部正位(PA)X光片往往承载着大量关键信息——但解读它需要多年训练和临床经验。…

作者头像 李华