c++学习2

一.结构体

1.对齐规则

用空间来换时间,提高对数据的提取
1.1 结构体自动对齐规则

  • 确定分配单位(一行长度):由结构体中最大的基本类型长度决定
  • 确定偏移量:成员偏移量=自身类型长度的整数倍
  • 结构体的大小:为分配单位的整数倍
struct Date
{
	//一行的长度为4个字节:int最大
	char a;//偏移量1 * 0 = 0,所以位置在0
	short b;//偏移量2 * 0 = 0,0这个位置被a占取,所有变2 * 1 = 2,位置为2
	int a;//偏移量4 * 0 = 0,0这个位置被a占取,所有变4 * 1 = 4,位置为4
	char d;//
	short e;//
};

在这里插入图片描述
1.2 强制对齐规则
使用#pragma pack(value):value值为1,2,4,8,16

  • 确定分配单位(一行长度):min(结构体中最大的基本类型,value)
  • 确定偏移量:成员偏移量=自身类型长度的整数倍
  • 结构体的大小:为分配单位的整数倍

2.结构体的位域

减少空间的使用
2.1 位域

struct A
{
	int a:2;//a只占有2个字节
	int b:3;//b只占有3个字节
	int c:3;//c只占有3个字节
};
//sizeof(A)的结果为1

注意

  • 相同类型的的相邻位域可以压缩,但不会超过自身类型的大小
  • 不可以对位域进行取地址的操作:&A.a这会报错
  • 对位域进行赋值时不能超过其本身的宽度,超过只会取低位的

2.2 另起一个存储单元
起到防止自动压缩

struct A
{
	char a:4;
	char :0;//另起一个存储单元
	char c:4;
};
//sizeof(A) = 2


2.3 无意义位段
可以将无意义的位段进行压缩,但无意义位段不能赋值
方便在一字节中保存多个信息

struct A
{
	char a:4;
	char :2;//无意义位段
	char c:2;
};
//sizeof(A) = 1

二.共用体

所有成员共用一块空间,使用union关键词

  • 共用体的空间,是由最大的成员类型决定
  • 在共用空间中能操作的空间范围是由成员自身类型长度决定的
union Data
{
	char a;
	short b;
	int c;
};
Date ob;
ob.a = 10;//空间中的值位10
ob.b = 20;//空间中的值从10变成了20
ob.c = 30;//空间中的值从20变成了30

ob.a + ob.b + ob.c = 90//30 + 30 + 30

在这里插入图片描述

Date ob;
ob.c = 0x01020304;//空间中的值01020304
ob.b = 0x0102;//空间中的值变成了01020102
ob.a = 0x01;//空间中的值变成了01020101
ob.a + ob.b + ob.c = 0x01020203//0x01 + 0x0101 + 01020101

三.枚举

使用的关键词为enum

  • 结构为enum NAME{VALUE_NAME1,VALUE_NAME2}
  • 默认变量的值是从0开始,往后依次递增
  • 修改变量值是枚举中进行,如VALUE_NAME1=10,之后的变量值也是从10开始递增

四.链表

链表的定义:

struct A
{
	//表示数据域
	int num;
	char name[5];

	//指针域
	struct A *next;
};

struct A node1 = {100,"lucy",NULL};
struct A node2 = {101,"bob",NULL};
struct A node3 = {102,"tom",NULL};

//定义链表
struct A *head = &node1;
node1.next = &node2;
node2.next = &node3;
node3.next = NULL;

搞钱的第二天,加油

给我听爽了

吃了几个邓紫棋??
180抽,大伟哥的别墅没了

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值