结构体中的数据是如何存储的(结构体中的内存对齐)

本文详细解释了C语言中结构体内部数据的存储机制,包括偏移量、对齐规则和如何通过调整成员变量顺序节省空间。重点讨论了内存对齐的原因以及如何合理利用对齐数以提高效率。
摘要由CSDN通过智能技术生成

我们都知道c语言中有自定义类型,而自定义类型中,我们经常需要使用结构体类型,今天我们就来探究结构体中的数据是如何存储的。

试想一下,S1、S2、S3的数据各占几个字节??

大概的答案都是:5  6  7

因为这种思考方式都是将里面的数据按大小依次排列,int类型占4个字节,char类型占1个字节,故S1占4 + 1 = 5个字节,S2、S3以此类推,但是事实是这样的吗??

正确的结果如下:

至于为什么会这样,下面我们将对结构体的存储方式进行解析。

 这是S1的起始位置:

右边的数字(0,1...)代表着偏移量,每一个数据都有偏移量

<

在Qt,可通过QJsonDocument和QJsonObject来将结构体保存为JSON格式。首先,我们需要将结构体数据转换为QJsonObject对象,然后再将QJsonObject对象转换为QJsonDocument对象并进行保存。 下面是一个示例代码: ```cpp #include <QCoreApplication> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> // 定义一个结构体 struct Person { QString name; int age; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建一个Person结构体对象 Person person; person.name = "张三"; person.age = 25; // 将结构体数据转换为QJsonObject对象 QJsonObject jsonObj; jsonObj["name"] = person.name; jsonObj["age"] = person.age; // 将QJsonObject对象转换为QJsonDocument对象 QJsonDocument jsonDoc(jsonObj); // 将QJsonDocument对象保存为JSON文件 QFile file("person.json"); if (file.open(QIODevice::WriteOnly)) { file.write(jsonDoc.toJson()); file.close(); qDebug() << "保存成功!"; } else { qDebug() << "保存失败!"; } return a.exec(); } ``` 上述代码,我们定义了一个Person结构体,其包含了姓名和年龄两个成员变量。然后,我们将结构体数据保存到QJsonObject对象,再将QJsonObject对象转换为QJsonDocument对象。最后,我们将QJsonDocument对象保存为名称为"person.json"的JSON文件。 运行上述代码后,将在项目文件夹下生成一个名为"person.json"的文件,其内容为: ```json { "name": "张三", "age": 25 } ``` 这样,我们就成功将结构体保存为JSON格式了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sugar_goat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值