当前位置: 首页 > news >正文

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直接给位段的成员输⼊值,只能是先输⼊
放在⼀个变量中,然后赋值给位段的成员。
http://www.jsqmd.com/news/328046/

相关文章:

  • 【Linux04】 Linux基础指令完结与Linux权限初识(一)
  • 聚焦洪山:2026年幼儿英语兴趣班专业选择面面观
  • 【2025最新】基于SpringBoot+Vue的房屋交易平台管理系统源码+MyBatis+MySQL
  • 2026东湖高新区英语辅导机构深度测评与六强推荐
  • 抢不到 Coding Plan?本地 LiteLLM 让 GLM 也能跑 Claude Code【手把手本地部署教程!】
  • [Unix Pipe] find . -maxdepth 1 -type f -name *.torrent | transmission-show
  • 2026年青少年内衣权威企业盘点:科技健康引领新选择
  • 十六、用 GPT2 中文古文模型实现经典名句续写
  • 十四、基于 BERT 的微博评论情感分析模型训练实践
  • 260131 今年已经过去一个月了
  • 大数据领域 HDFS 的数据一致性保障
  • 探索大数据领域 RabbitMQ 的多租户模式
  • 大数据领域数据架构的财务管理应用
  • 腾讯超算中心AI资源调度:架构师如何支持游戏AI应用?
  • 基于SpringBoot+Vue的房屋交易平台管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • Java Web 经方药食两用服务平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • SpringBoot+Vue Spring Boot疗养院管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Spring Boot企业员工薪酬关系系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • Java SpringBoot+Vue3+MyBatis 高校教师电子名片系统系统源码|前后端分离+MySQL数据库
  • hendon test routers
  • 2601C++,复制超文本格式
  • 2601,写个kde语法高亮文件
  • 2026年SPC蜂窝铝整板生产商深度评测:谁才是性价比之王?
  • 驻马店全铝焊接大板企业如何选?2026年开年深度观察
  • 驻马店全铝阳台柜选购指南:2026年头部厂商深度解析与推荐
  • 算法题-03
  • OTG数据充电交互讲解
  • LDR系列PD应用方案讲解之OTG边听边充边传数据边投屏多合一应用
  • Type-c OTG数据与充电如何进行交互使用应用讲解
  • 大规模语言模型的反事实推理在政策模拟与评估中的多维度应用