###########我嘞个扫刚之结构体#########

简介: ###########我嘞个扫刚之结构体#########

一·结构体介绍与书写:
首先我们来讲结构体就是一类物统称,类似于成绩单,里面记录这姓名年龄分数等;下面我们来展示代码:

struct stu {
int age;
int score;
char name [100];

}s;//这里可以定义结构体变量就不用在下面重新定义了
int main() {
/struct stu s = { 65,100,"zhangsan" };//或者还可以这样填进去/
struct stu s = { .age = 65,.name = "zhangsan",.score=100 };
printf("%d %d %s", s.age, s.score, s.name);
return 0;
}

但是为了节约内存问题,以及它的排布,我们最好选用指针来访问:

//接下来我我们来展示一下用指针访问结构体,可以节约内存的使用

struct stu {
int age;
int score;
char name[100];

};
void full(struct stu p) {
p->age = 65;
p->score = 100;
strcpy(p->name, "zhangsan");
}
void print(struct stu
p) {
printf("%d %d %s", p->age, p->score, p->name);
}
int main() {
struct stu s;
full(&s);
print(&s);
return 0;
}

接下来我们介绍下结构体自引用;我们知道在存储得到连续的数字,一定要找得到它的地址使它联系起来,那么结构体也便是如此;故一个结构体中可以存放一定的数据和地址;下面我们引用一段代码来介绍一下 ;

struct Node
{
int data;
struct Node* next;
};//这里是结构体的自引用:我们在结构体里面放上数据以及一个自己类型的指针可以找到另一个结构体变量;
int main() {
struct Node a = { 1, NULL };//这里我们a不在往下找故令为null;
struct Node b = { 2, &a };//我们在这里会打印出结构体变量a的地址
printf("%d\n", b.data);
printf("%p", b.next);
return 0;
}

在这里我们就简单的实现了结构体的自引用效果;

二·结构体对齐问题:
首先结构体放入储存的时候,有一定规矩,我们来解释:

1.首先默认无论第一个成员是什么类型我们都放在对齐数为0的地方;然后之后的成员我们要根据类型判断字节数然后放在对齐数为它和编译器默认的值的最小值排放,然后后面的依次这样。(这里我们说明一下在vs默认值是8;gcc等为对齐数本身大小。

2.我们最后排放完后,数字节数时,它的对齐数一定要是成员中最大对齐数的整数倍。

3.但是可能也会有结构体嵌套结构体类型,那么这个成员结构体的对齐数是这个被嵌套的结构体所

有成员中对齐数最大的倍数,最终这个外面的结构体的字节数就是他的所有成员对齐数的整数倍(包括被嵌套的结构体里面的成员)。

下面我们来用代码解释一下:

struct S {
char a;
int i;
char t;
}s;
int main() {
printf("%zd", sizeof(s));
}

肯定会疑惑这里为什么是12呢;接下来我们来画图解释一下结构体储存的原理:

接下来我们来介绍一下结构体嵌套自己求法:

struct S {
char a;
int i;
char t;
}s;
struct k {
int m;
struct S s;
char p;
}n;
int main() {
printf("%zd", sizeof(n));
}
这里我们画图解释一下:

那么他会打印出:

三·结构体位段问题:
我们首先介绍一下位段简单概念就是给结构体内的成员分配比特位;然后我们就限制了它在内存中的存储大小;下面我们用代码和图片展示一下

当然它的使用也存在跨平台问题:

如我们int 位段的有无符号是不确定的;最大位段的数也是不同(如16位机器是16,32位机器是32,写错是会出问题的);其次就是位段储存数不知是从右往左还是从左往右;舍弃问题也是如此,当我们对位段的数取地址,由于它们是分配储存不一,故无法找到正确的地址。

相关文章
|
6月前
|
人工智能 运维 安全
2026年阿里云计算巢部署OpenClaw(原Clawdbot)零基础喂饭级教程
在2026年AI Agent全民普及的浪潮中,OpenClaw(原Clawdbot,曾用名Moltbot)凭借开源免费、功能强大、插件丰富的核心优势,成为零基础用户与中小企业搭建专属AI助手的首选工具。这款由奥地利开发者主导的开源项目,截至2026年2月,GitHub星标已突破18.6万,Fork数超3.2万,是年度增长最快的开源AI自动化项目之一。它并非传统的聊天机器人,而是一款具备“思考+执行”能力的AI自动化代理框架,可通过自然语言指令完成办公自动化、网页抓取、代码开发、内容创作等各类任务,搭配ClawHub技能市场的3000+款模块化技能,能轻松适配个人办公、团队协作、业务提效等全场景
586 8
|
3月前
|
人工智能 JSON 安全
[理论篇-8]MCP协议详解
用最直白的话讲清楚 MCP 是什么、为什么 2025 年它突然成为 AI 行业最热的协议、以及它会怎么改变你和 AI 工具的相处方式——不管你是开发者、产品经理、还是只想用好 AI 的普通用户。
637 1
|
5月前
|
运维 安全 定位技术
登录异常如何快速发现?我是这样用IP查询工具做风控的​
本文从运维视角分享如何利用IP数据云等工具,基于IP地理位置、网络属性、风险评分等多维数据,构建低成本、高实效的异常登录预警机制,涵盖实时风控、行为基线对比与日志告警实战方案。(239字)
555 6
|
5月前
|
机器学习/深度学习 并行计算 Ubuntu
WSL安装
本文详解WSL2配置Ubuntu(推荐20.04)用于深度学习:启用虚拟化、安装、显卡驱动配置、安全卸载方法;重点解决libcudnn/libcuda软链接失效问题,提供临时修复与永久生效(.bashrc)两种方案;并配置Windows代理、内存/网络等高级选项,兼顾开发与训练需求。
501 1
|
6月前
|
vr&ar 开发工具 C#
基于Rokid使用Unity开发3D轮盘抽奖游戏:虚实交互实战全解析
本文详解如何基于Rokid AR Lite与UXR3.0 SDK,在Unity中开发轻量、沉浸式3D轮盘抽奖AR游戏:涵盖环境搭建、3D场景构建、多模态交互(射线/触控)、旋转物理逻辑、中奖判定及性能优化,助力开发者快速落地虚实融合趣味应用。(239字)
|
6月前
|
人工智能 搜索推荐 安全
企业建站如何选择网站建设平台或CMS建站系统
截至2026年1月,中国网站超460万个。建站首选SAAS(如阿里云/腾讯云建站)或成熟CMS(如PageAdmin、PHPCMS、Ecshop),避免使用无维护的个人开源系统。重内容、轻排名,AI时代网站是品牌知识入口,需持续更新优质内容。(239字)
719 12
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
1093 0
|
并行计算 算法 量子技术
量子计算在金融模型中的应用:未来金融的“黑科技”
量子计算在金融模型中的应用:未来金融的“黑科技”
652 1
|
12月前
|
人工智能 自然语言处理 数据可视化
聊聊多维表格与BI|AI x Data 数据产品的发展趋势
多维表格与Quick BI深度融合,助力企业在AI与数据时代实现高效分析。多维表格作为轻量级数据管理工具,擅长快速填报与基础分析;而Quick BI则专注于多源数据整合、深度洞察与可视化展示。两者协同,既能降低使用门槛,又能提升数据分析的广度与深度,满足企业从数据采集到智能决策的全链路需求。未来,数据产品将朝着低门槛、多场景与实用性方向发展,推动商业智能迈向新高度。
659 25
|
10月前
|
存储 监控 安全
RFID小区电动车实施智能化监管模式
RFID技术助力小区电动车智能管理,通过电子标签实现车辆进出、停放、充电全流程监管,杜绝入户充电、乱停乱放、盗窃等隐患,提升安全与管理效率,推动智慧社区建设。(238字)

热门文章

最新文章