news 2026/6/22 3:00:25

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/6/20 0:45:17

2601,写个kde语法高亮文件

提示:如果想写一个高亮语法文件,XMLCompletion插件可能会很有帮助. 这里概述了KDE4中高亮定义XML格式.基于如下,它将描述主要组成部分及其含义和用法. Kate高亮定义文件的主要部分 在language.dtd文件中也就是DTD,保存正式定义,应该在你的系统目录安装,即$KDEDIR/share/apps/ka…

作者头像 李华
网站建设 2026/5/31 20:36:52

2601C++,复制超文本格式

超文本的剪切板格式 超文本有自己的剪切板格式(叫超文本格式(CF_HTML),可用来向其他应用助手(如Excel,Word或其他办公应用复制)提供数据. CF_HTML是包含说明,环境和该环境中的片段完全基于文本的格式.生成要发送到剪切板的数据时,必须包含数据说明,以指示剪切板版本及环境和片…

作者头像 李华
网站建设 2026/6/17 23:37:26

OTG数据充电交互讲解

随着科技的飞速发展,智能移动设备已成为我们生活中不可或缺的一部分。而在这些设备的连接与数据传输中,Type-C接口以其高效、便捷的特性逐渐占据了主导地位。OTG(On-The-Go)技术则进一步扩展了Type-C接口的功能,使得设…

作者头像 李华
网站建设 2026/6/18 2:30:19

OpenClaw:你的个人AI助手,多平台统一控制的革命性方案

在这个AI助手百花齐放的时代,你是否厌倦了在多个平台间来回切换?OpenClaw用一套系统统一了所有沟通渠道,让你真正拥有属于自己的AI助手。 🦞 什么是OpenClaw? OpenClaw是一个开源的个人AI助手平台,它可以在…

作者头像 李华
网站建设 2026/6/11 3:48:47

Java Web 房屋交易平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展,房地产行业逐渐向数字化转型,传统的房屋交易模式已无法满足用户对高效、透明和便捷服务的需求。线上房屋交易平台的出现,为用户提供了更加多样化的选择,同时也为开发商和中介机构拓宽了销售渠道。然…

作者头像 李华