结构体,联合体和枚举类型

=====================================

一.结构体

1.结构体大小

①若没有位段:先找默认对齐数和每个数的较小值,再在这些较小值中找出最大的,即为最大对齐数.若上个对齐数开辟的空间还有冗余可以放下下个数,就把下个数也放在这个空间内,如果不够放下下个数,就把下个数放到下个空间内.(当结构体中有结构体时,计算结构体大小时,结构体里的结构体单独计算,最后其大小加在外层结构体的大小上)
②若有位段:看各位段开辟的空间大小,能不能放下下个数.

2.结构体的定义

struct Stu s{
   
score;
};

3.结构体的引用

①.和->的区别

(*a).b 等价于 a->b

结构体名.要引用的属性名     ==  读取该结构体中要引用属性
结构体指针->要引用的属性名  ==  读取该结构体中要引用属性
(结构体指针指向结构体)

②结构体的引用

struct Stu s{
   
int x;
int y;
};

int main() {
   
	struct Point s = {
    3, 5 };
	printf("%d %d", s.x, s.y);
	return 0;
}

③结构体大小

VC编译器的默认最大对齐数为8

可以用#pragma pack(4)来重新初始化最大对齐数
用#pragma pack()来取消刚初始化的最大对齐数
壹.不存在位段

先取结构体中各数据的大小和默认最大对齐数比,其中的较小值为该数的最大对齐数
然后比较所有数据的最大对齐数,最大的为所求
然后将各个数据塞进所求的整数倍

  • 当无结构体嵌套时,数据塞进所求的整数倍即可
  • 当有结构体嵌套时,数据塞进所求的整数倍,并嵌套的结构体另独立计算,然后最后再看外层是否为所求的整数倍
贰.存在位段(位段不存在跨平台性)

结构体中位段的大小和对大对齐数无关,但和位段定义的数据类型有关

struct S
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值