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

C语言之结构体类型

结构体是自定义的复合数据类型,可以把多个不同类型打包成一个整体 ,用来描述一个对象,如一名学生:身高int,体重float,学号int,名字char,年龄int.....……就可以用结构体把他们封装在一起。

struct 结构体名

{
数据类型 成员1;

数据类型 成员2;

.....

};

struct student

{

int id;//学号

char name[20];

int age;

……;
};

创建结构体变量有三种情况:

1.先定义类型,在单独定义变量

struct student stu1;

stu1就是一个结构体变量,拥有id,name,age....成员。

2.定义类型时顺便定义变量:

struct student

{

int id;//学号

char name[20];

int age;

……;
}stu2,stu3;

3.匿名结构体:

struct

{

int id;

char name[20];

......;

}stu4;

其中匿名结构体只能使用一次

再者,结构体初始化:

1.

stuct student stu={0101,"张三",18};

顺序必须和结构体成员完全一致。

2.

struct student stu

{

.id=0101;

.name="李四";

.age=18;

}这个可以乱序,不管先后;没赋值的默认为零或者为空;这个是运用 . 结构体访问操作符

3.

struct student stu;

stu.id =0101;

stu.age=18;

....

字符串不能直接用=赋值;strcpy(stu.name,"张三");

结构体在存储中存在内存对齐

首先给出为什么存在内存对齐这个概念:

其次要理解内存对齐这个概念,可以计算出结构体内存大小

struct student

{

char a;

char b;

int c;

}stu;

那么你们觉得它多大,如果没学过此张内容会说是6,其实并不是,不然就不会有内存对齐这个概念了,这个大小其实为8;

先看内存对齐规则:

画出一块内存:从红线起往下数字为偏移量大小,就是相对红线的距离

所有第一个不管什么类型从起始位置0开始char就占一个格子,下个类型的放置就要看他的大小是否为此处偏移量的整数倍,下个偏移量是1,char大小为1,就可以放,如果是int大小为4,偏移量为1,不是他的倍数就要舍弃多个格子到达偏移量是4的位置就可以往后放置了;但其实其中有个比较,比如vs中默认对齐数是8,你把8跟int的4作比较,谁小取谁,取4作为对齐数去看偏移量放置格子,最后放置完时,比如上面char,char,int,先直接存2个char,在浪费两个空间到偏移量为4的位置放置int总长为8,最后在成员大小中选择最大的类型大小,这里就是4,他的整数倍就是最后的答案,比如这里算出来时8为4整数倍,结果大小就是8,如果算出来为9,那就在舍弃3个格子,到达12处,这里是4的倍数,所以结果就是12;

#pragma可以修改默认对齐数;感谢观看!

http://www.jsqmd.com/news/599743/

相关文章:

  • 中小卖家最怕买“大而全”,真正需要的是“刚刚好”的自动化方案
  • LeetCode单词拆分:动态规划详解,Apache介绍和安装。
  • OpenClaw智能日志分析:Qwen3.5-9B排查系统问题的实战演示
  • 从‘Hello World’到生产环境:用Flume spooldir + HDFS Sink搭建你的第一个日志采集管道
  • 突破语言壁垒:Figma全界面中文本地化终极方案
  • 线性表顺序存储结构全解析,第十四篇:Python异步IO编程(asyncio)核心原理解析。
  • OpenClaw学术研究:Qwen3.5-9B自动生成论文综述与参考文献
  • 2026年大数据专业数据分析学习指南
  • 三极管的混合π模型
  • STM32高负载串口通信DMA优化实践
  • 3D游戏开发必备:手把手教你用Python实现欧几里得变换(附完整代码)
  • 用嘎嘎降AI处理学位论文全流程:从上传到验收完整教程
  • 嵌入式开发自动化实践与效率提升
  • STM32嵌入式开发核心知识点与实战技巧
  • 系统架构设计师必知的10大技术要点,C++格式化输出。
  • LVGL移植实战:基于framebuffer的嵌入式GUI开发
  • Vue vs React:核心差异与选型指南,Steam秋季特卖倒计时!用UU远程国庆随时购史低游戏!。
  • 以太网赋能机器人神经网络革命,江协科技 CAN总线入门课程(仲裁)。
  • C++ 模板编译期计算与性能优化
  • Go语言接口的隐式实现机制与空接口在泛型编程中的变通方案
  • 2026四川工业风机运维服务优质品牌推荐:成都耐高温风机厂家/成都轴流风机厂家/成都防爆风机厂家/选择指南 - 优质品牌商家
  • Mac本地部署大模型|Ollama+Gemma4/Qwen3.5新手零失败教程,彻底告别Token消耗✨
  • 从开发到分发:用PyInstaller打包你的Python GUI应用(Tkinter/PyQt数据文件处理实战)
  • 智能定时关机:省电又高效,VR大空间资料 02 —— 常用Body IK对比。
  • OpenClaw技能市场探秘:Qwen3.5-9B加持的10个高效工具
  • 2026q2四川泳池戏水池运维服务优质机构推荐:四川游泳池设备工程/学校泳池设备/恒温游泳池设备/戏水池厂家/选择指南 - 优质品牌商家
  • VSTO智能解析身份证:国标到自动化,STM32 GPIO实战:LED与按键控制。
  • 超越准确率:聊聊PTB-XL数据集上心电分类模型的可解释性与临床落地挑战
  • 视频动态编码新突破:VideoOrion性能提升10%,??轻量之选:不依赖宝塔,用 NPM 与命令行部署在线工具箱?。
  • Arduino嵌入式Cohere客户端:轻量级LLM边缘调用库