没有合适的资源?快使用搜索试试~ 我知道了~
C语言结构体的大小是如何计算的?(结构体对齐)
需积分: 0 0 下载量 196 浏览量
2024-04-08
11:23:16
上传
评论
收藏 3.19MB PDF 举报
温馨提示
试读
12页
【C语言】结构体的大小是如何计算的?(结构体对齐)
资源推荐
资源详情
资源评论
2024/4/8 上午11:16
【C语言】结构体的大小是如何计算的?(结构体对齐)_结构体的大小怎么计算-CSDN博客
https://blog.csdn.net/weixin_72357342/article/details/131135555?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidula
…
1/12
【C语言】结构体的大小是如何计算的?(结构体对齐)
修修修也
阅读量2.9k 收藏 68 点赞数 21
分类专栏: C语言 文章标签: c语言 c++ 算法 学习 数据结构
已于2024-03-08 18:21:01修改
GitCode 开源社区
文章已被社区收录
🦄个人主页:修修修也
🎏所属专栏:C语言
⚙ 操作环境:Visual Studio 2022
目录
一.使用sizeof计算结构体的大小
二.影响结构体大小的因素
1.结构体成员的类型
2.结构体成员的对齐方式
3.结构体成员的顺序
三.利用结构体对齐规律计算结构体大小
1.结构体的对齐规则:
2.结构体对齐的原因:
1>平台原因(移植原因):
2>性能原因:
3.如何修改默认对齐数:
一.使用sizeof计算结构体的大小
通常情况下,我们习惯于使用sizeof运算符来计算结构体的大小。
例如,下面是一个结构体的定义:
其中,Student是该结构体的类型名,而id,name,age,score则是该结构体的成员。
接着我们在主函数内部创建一个结构体变量s。这时我们就可以使用sizeof运算符来计算这个结构体的大小了。如,直接使用sizeof操作符计算变量
小:
1 struct Student {
2 int id;
3 char name[20];
4 int age;
5 float score;
6 };
1 #include <stdio.h>
2
3 struct Student {
C语言
专栏收录该内容
42 篇文章21 订阅
修修修也
已关注
21
博客 下载 学习 社区 知道 GitCode InsCode
c语言
搜索 会员中心 消息 历史
2024/4/8 上午11:16
【C语言】结构体的大小是如何计算的?(结构体对齐)_结构体的大小怎么计算-CSDN博客
https://blog.csdn.net/weixin_72357342/article/details/131135555?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidula
…
2/12
运行结果为:
当然我们也可以不创建变量,直接将结构体类型放入sizeof中来计算该结构体类型的大小:
可以看到,这个结构体的大小是32个字节。
这是由于int类型占用4个字节,char类型占用1个字节,float类型占用4个字节,而且结构体中的成员顺序是按照定义的顺序来排列的。
因此我们似乎很容易就能计算出这个结果:4+20+4+4=32字节
但事实上结构体的大小并不是通过这样简单累加计算的,如,创建如下结构体:
然后使用sizeof计算该结构体的大小:
5 char name[20];
6 int age;
7 float score;
8 };
9
10 int main()
11 {
12 struct Student s;
13 printf("Size of struct Student is %d bytes\n", sizeof(s));
14 return 0;
15 }
4 int id;
1 struct stu
2 {
3 char ch1;
4 int i;
5 char ch2;
6 };
1 #include<stdio.h>
2 struct stu
3 {
修修修也
已关注
21
博客 下载 学习 社区 知道 GitCode InsCode
c语言
搜索 会员中心 消息 历史
2024/4/8 上午11:16
【C语言】结构体的大小是如何计算的?(结构体对齐)_结构体的大小怎么计算-CSDN博客
https://blog.csdn.net/weixin_72357342/article/details/131135555?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidula
…
3/12
运行结果为:
为什么是 12 ? 而不是 1+4+1=6 ?
别急,我们再更改一下结构体内部的成员顺序:
再运行测试:
5 int i;
6 char ch2;
7 };
8
9 int main()
10 {
11 printf("Size of struct stu is %d bytes\n", sizeof(struct stu));
12 return 0;
13 }
4 char ch1;
1 struct stu
2 {
3 char ch1;
4 char ch2;
5 int i;
6 };
1 #include<stdio.h>
2 struct stu
3 {
4 char ch1;
5 char ch2;
6 int i;
7 };
8
9 int main()
10 {
11 printf("Size of struct stu is %d bytes\n", sizeof(struct stu));
12 return 0;
13 }
修修修也
已关注
21
博客 下载 学习 社区 知道 GitCode InsCode
c语言
搜索 会员中心 消息 历史
剩余11页未读,继续阅读
资源评论
再路上1216
- 粉丝: 35
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功