news 2026/5/1 8:33:57

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/5/1 4:04:02

十四、基于 BERT 的微博评论情感分析模型训练实践

微博作为国内主流的社交媒体平台,其评论数据蕴含着丰富的用户情感倾向。本文将详细介绍如何基于 BERT 预训练模型构建微博评论情感分析模型,实现 8 类情感(喜欢、厌恶、开心、悲伤、愤怒、惊讶、恐惧、无情感)的分类任务&#xff…

作者头像 李华
网站建设 2026/5/1 4:43:02

寻找差异表达基因,进行富集分析

1. 转换数据 1.1 数据转换概述 在生物信息学数据分析中,我们需要将AnnData数据转换为DataFrame数据,DataFrame数据的行为位点(细胞),列为基因。这种转换使得数据更容易处理和分析。 1.2 数据预处理流程 数据转换包…

作者头像 李华
网站建设 2026/5/1 5:00:56

Swin2SR操作流程:左侧面板上传图片注意事项

Swin2SR操作流程:左侧面板上传图片注意事项 1. 为什么说Swin2SR是“AI显微镜” 你有没有试过把一张模糊的截图放大到全屏——结果满屏都是马赛克和糊成一片的边缘?传统方法只能“拉伸”,而Swin2SR不是在拉,是在“看”、在“想”…

作者头像 李华