结构体的定义,用法;结构体大小,字节对齐方式

17 篇文章 0 订阅
订阅专栏

一、结构体的定义,用法

结构体是一种新的数据类型,它可以包含多种不同的基本数据类型,可以更好的整合数据,多用于大小型项目中。

1.定义方法:

 中间的定义模式不常用(无法见名知意)

2.结构体变量初始化:

在定义变量时初始化:struct stu student = {2021,"yuanhua",17,"man"};

定义完变量后初始化:   struct stu student; student.id=2021,          

                                      gets(student.name);  student.age=17;        

                                      gets(student.sex);

结构体变量访问成员用    .

结构体指针变量访问成员用  ->

_____________________________________________________________________________

3.多个结构体嵌套:

struct address {
    char city[15];
};
struct stu {
    int id;
    char name[15];
    struct address local;
    int age;
    char sex[7];
};

 二、结构体大小,字节对齐方式:

结构体的大小并不简单是其成员字节大小之和,而是存在一种字节对齐方式。

因为cpu是以1, 2,4,8的字节块来读写内存,所以为确保结构体内数据能正确访问,对其地址作出限制,地址必须是指定对齐数的倍数,各种类型数据必须按一定规则排序。

windows平台上默认字节对齐数为8;

linux平台上默认字节对齐数为4;

字节对齐数可以通过下列方式更改

#pragma pack (4)             //括号里为要改的对齐数

需要更改对齐数的代码

#pragma pack ()               //括号里不填任何数

基本数据类型:int      float      char     double        bool       long long

结论:

1) 结构体变量的首地址,必须是 MIN{"结构体最大基本数据类型成员所占字节数", 指定对齐方式} 大小的整数倍。

2) 结构体每个成员相对于结构体首地址的偏移量,都是 MIN{当前基本数据类型成员, 指定对齐方式}大小的整数倍。

3) 结构体的总大小,为 MIN{ 结构体 “最大基本数据类型成员所占字节数”(将嵌套结构体里的基本类型也算 上,得出最大基本数据类型成员所占字节数), 指定对齐方式} 大小的整数倍。

练习:windows平台

1.默认字节对齐数:8

struct A {
    int a;
    char c;
    double b;
};

图解 :

得出:结构体A大小为:4+1+3+8=16 

 代码验证:

 2.更改字节对齐数:

#pragma pack (2)

struct A {
    int a;
    char c;
    double b;
};

#pragma pack ()

图解:

得出结构体A大小为:4+1+1+8=14

代码验证:

 

3.结构体嵌套

struct address {
    char city[15];
};
struct stu {
    int id;//4
    char name[15];//15
    struct address local;//15
    int age;//4
    char sex[7];//7
};

图解:

得出:结构体stu大小为4+15+15+2+4+7+1=48

代码验证:

结构体类型定义及所内存字节数
qq_74072878的博客
12-16 3595
头歌结构体
c语言结构体字节对齐详解
cpp加油站的专栏
05-06 808
1.什么是字节对齐c语言结构体里面一般会按照某种规则去进行字节对齐。 我们先看一段代码: struct st1 { char name; double age; char sex; }; //32位下 sizeof(struct st1) = 16 //64位下 sizeof(struct st1) = 24 struct st2 { char a; char b; char c; }; //32位和64位下, sizeof(struct st2)都是3个字节 从以上结果可以看出,结构体
c语言学习笔记——结构体
最新发布
wotub的博客
07-23 168
struct 变量名 {类型 变量名;int age;int main()//定义三个学生,同时进行赋值//存入数组中//遍历数组得到每一个元素i < 3;
结构体字节对齐
weixin_34123613的博客
12-11 82
结构体字节对齐       在用sizeof运算符求算某结构体空间时,并不是简单地将结构体中所有元素各自的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。      计算结构变量的大小必须讨论...
结构体数据对齐
lzh_wk的博客
08-23 2760
结构体数据对齐 结构体数据对齐,是指结构体内的各个数据对齐。在结构体中的第一个成员的首地址等于整个结构体的变量的首地址,而后的成员的地址随着它声明的顺序和实际用的字节数递增。为了总的结构体大小对齐,会在结构体中插入一些没有实际意思的字符来填充(padding)结构体。 在结构体中,成员数据对齐满足以下规则: a、结构体中的第一个成员的首地址也即是结构体变量的首地址。 b、结
结构体
野生码农
02-02 5496
c# 结构体 4字节对齐_结构体字节对齐
weixin_39669147的博客
11-21 984
先说结论:sizeof求得的结构体大小并不一定等于各个数据成员的大小之和。struct 比如有如上两个结构体:A和B。都含有两个int型,一个double型数据成员,但成员的顺序不一样。如上图所示,int 和 double 分别为4个字节和8个字节。而结构体A和B使用sizeof的结果分别为16个字节和24个字节。可以看出结构体B所字节数并不等于其成员之和:sizeof(B) ≠ sizeo...
C/C++结构体字节对齐详解
12-22
 我们先看看sizeof的定义——sizeof的结果等于对象或者类型内存字节数,好吧,那让我们来看看S1的内存分配情况  S1 s1 = { 'a', 0xFFFFFFFF };  定义上面的变量后,加上断点,运行程序,观察s1所在的...
python结构体字节对齐_Python及字节对齐的问题
weixin_39902085的博客
12-18 581
该结构大致如下:struct TestStruct{int data1;char data2;char data3;};对应的Python代码:import structs = struct.unpack("icc", buf) #buf是从网络接收的字节流结果却报“Unpack str size does not match format”错。很明显是C++ struct产生的size和Pyth...
c# 结构体 4字节对齐_字节对齐(结构体)
weixin_39963819的博客
11-21 813
最近在备战秋招,面经里很多次提到字节对齐,干脆整明白它!!!!20 字节对齐_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com这位大神的视频超级棒,看完绝对就会了,顺便可以用下面另一位高手的试题测试一下结构体 字节对齐的练习​www.jianshu.com我来自己总结一下:(也可以直接看最后的解题思路,但是看完的更好 )首先来看正常情况下的字节对齐(64位机器)...
python结构体字节对齐_八字节对齐
weixin_30470785的博客
12-29 971
字节对齐意义在进行c/c++开发时,特别是要求跨平台或者网络通信的时候,都会要求进行字节对齐,那为什么需要对齐,如果不对齐会有什么问题呢。(1) 存储方式:现代计算机处理器对存储的读取都是按照特定大小字节去读写(称其为一个存储单元),比如一个变量char,它的长度为1,但是在存储器中它用的空间是一个存储单元。当变量字节长度小于等于一个存储单元时,都将分配一个存储单元,且存储空间永远是存储单元的整...
按位定义结构体
Jogholy的专栏
03-01 9002
<br />按位定义一个结构体 <br />struct   s_DosAttributes <br />{ <br />unsigned   ReadOnly     :1; <br />unsigned   Hidden         :1; <br />unsigned   System         :1; <br /><br />unsigned   VolumeID     :1; <br />unsigned   Directory   :1; <br />unsigned   Archi
C结构体之位域(位段)
weixin_30657541的博客
09-20 1451
有些信息在存储时,并不需要用一个完整的字节, 而只需几个或一个二进制位。例如在存放一个开量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位...
结构体的的大小
post_joke的博客
07-23 360
计算结构体大小最重要的就是内存对齐 我们先看一个简单的 #include<iostream> using namespace std; struct A { char a; //1 short b; //2 int c; //4 }; 在这个结构体中,char的a 1个字节,short类型的b2个字节,int 类型的c4个字节 对齐前: ...
计算结构体的字节
weixin_74127402的博客
01-11 573
结构体大小计算的详细步骤
C语言中的结构体对齐
逍遥剑客的专栏
10-02 1555
(1)什么是字节对齐    一个变量用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n 取其成员种的数据类型空间的值最大的那个。(2)为什么要字节对齐    内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位
结构体中的位定义
la_fe_的博客
11-14 8811
1.结构体定义 在工作中,经常遇到按位(bit)定义结构体 的情况。由于一个字节有8个位,这时,程序员往往对bit的位置产生困惑。现在给出2个例子,来说明位的定义次序。 第一个例子是将unsigned char 分成8个比特。 #pragma pack(push,1) typedef struct ST_TEST { unsigned char ucA:1; unsigned char ...
C语言结构体用空间内存大小解析
热门推荐
Fubao Zheng的专栏
11-12 3万+
结构体的数据类型的有点我们就不啰嗦了,直接来看相同数据结构体的几种书写的格式吧。 格式一: 01.struct tagPhone 02.{ 03. char A; 04. int B; 05. short C; 06.}Phone; 格式二: 01.struct tagPhone 02.{ 03.
结构体计算结构体字节大小以及字节对齐
06-06
使用`sizeof`键字可以输出结构体`example`的字节大小,结果可能会因为字节对齐而不同。 需要注意的是,字节对齐的规则可能会因为编译器和操作系统不同而不同。在某些情况下,可以使用编译器提供的一些特殊的指令...
52
原创
161
点赞
211
收藏
292
粉丝
关注
私信
写文章

热门文章

  • 【c++中的四种类型转换,应用场景】 2270
  • 二维数组a的数组名a,a[0],&a,&a[0]的联系,和指针的关系 2200
  • 【Linux-Day8- 进程替换和信号】 1875
  • 堆排序——最大堆(通俗易懂,动图演示,静态分解 详解版) 1653
  • C++ 对象间的继承关系(赋值兼容规则) 1590

分类专栏

  • c++ 8篇
  • 数据结构 12篇
  • C语言 17篇
  • Linux学习 17篇
  • 每日一题 3篇

最新评论

  • 【Linux Day15 UDP网络通讯】

    CSDN-Ada助手: 推荐 CS入门 技能树:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

  • C++ 对象间的继承关系(赋值兼容规则)

    二十九亿少女的梦: 写的太好了吧表情包表情包

  • 二维数组a的数组名a,a[0],&a,&a[0]的联系,和指针的关系

    槐夏风清7: 好的好的表情包

  • 二维数组a的数组名a,a[0],&a,&a[0]的联系,和指针的关系

    HandSome34: 打字下次细心点呀,错别字太多了

  • 二维数组a的数组名a,a[0],&a,&a[0]的联系,和指针的关系

    HandSome34: 可以加油

最新文章

  • 【Linux Day17 Libevent库】
  • 【Linux Day16 I/O复用】
  • 【Linux Day15 UDP网络通讯】
2024年4篇
2023年35篇
2022年13篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢雕塑彩绘招聘玻璃钢室内背景墙雕塑咸宁玻璃钢花盆商丘镂空玻璃钢彩绘雕塑品牌玻璃钢雕塑服务电话湖南肖像校园玻璃钢雕塑珠海透明玻璃钢雕塑现货和龙玻璃钢浮雕人物山水雕塑宿迁玻璃钢仿铜雕塑多少钱玻璃钢卡通雕塑哪个品牌好杭州玻璃钢雕塑摆件开发西安公园玻璃钢雕塑设计主题玻璃钢卡通雕塑参考价武威仿真人物玻璃钢雕塑多少钱贵州欧式玻璃钢雕塑销售厂家南昌玻璃钢雕塑定做上海玻璃钢豹子雕塑青岛玻璃钢雕塑生产商玻璃钢雕塑质量保证措施中山玻璃钢抽象雕塑睢宁玻璃钢造型雕塑佛山玻璃钢狮身雕塑连云港花果山玻璃钢雕塑多吗佛冈玻璃钢雕塑厂家山东室内商场美陈多少钱雕塑厂玻璃钢翻模师傅是干什么的小型玻璃钢雕塑批发延庆玻璃钢动物雕塑玻璃钢人物雕塑特色东莞电镀玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化