首页 > 其他分享 >自定义类型-结构体(结构体,枚举,联合)2

自定义类型-结构体(结构体,枚举,联合)2

时间:2023-09-13 20:32:02浏览次数:34  
标签:ps struct 自定义 比特 int 位段 枚举 结构

      上节写到结构体对齐数,以及系统默认对齐数的修改,以及对齐数为何出现,实际上是牺牲一部分空间来换取读取速度也就是时间的方法。

在这里插入一段结构体函数传参的内容

以下代码为结构体初始化,使用自定义函数进行初始化,传递的时候使用了结构体地址。


struct S
{
	int a;
	char c;
	double d;
};

void init(struct S* ps)
{
	ps->a = 100;
	ps->c = 'w';
	ps->d = 3.14;
}

int main()
{
	struct S s = { 0 };
	init(&s);

	return 0;
}

设计两个打印函数,对比传值和传址的区别


struct S
{
	int a;
	char c;
	double d;
};

void init(struct S* ps)
{
	ps->a = 100;
	ps->c = 'w';
	ps->d = 3.14;
}

void print1(struct S tmp)
{
	printf("%d %c %lf\n", tmp.a, tmp.c, tmp.d);
}

void print2(struct S* pss)
{
	printf("%d %c %lf\n", pss->a, pss->c, pss->d);
}


int main()
{
	struct S s = { 0 };
	init(&s);
	print1(s);
	print2(&s);
	return 0;
}


自定义类型-结构体(结构体,枚举,联合)2_整型

1.接下来写接着上节,继续写结构体相关内容,结构体的位段操作

自定义类型-结构体(结构体,枚举,联合)2_位段_02

自定义类型-结构体(结构体,枚举,联合)2_整型_03

自定义类型-结构体(结构体,枚举,联合)2_初始化_04

自定义类型-结构体(结构体,枚举,联合)2_初始化_05

      结构体位段操作,实际上是为了节省空间。如下图所示,一个 int整型,大小是4个字节,占32个比特位,在位段操作之后,int a :2;只占取2个比特位。开辟空间时,如下图所示,先开辟一个整型,32个比特位,先存放占2个比特的a,再存放占5个字节的b,再存放10个字节的c,然后一个整型只剩下15个比特位,不够存放d,这时候就需要再创建一个整型,来存放d。加起来整个结构体的大小就是64个比特位,8个字节。

自定义类型-结构体(结构体,枚举,联合)2_整型_06

下图是char类型的结构体使用位段操作,存放时写入的数据超出了位段预留的空间,溢出的数据不会存储,如下图所示。

自定义类型-结构体(结构体,枚举,联合)2_位段_07

位段虽然可以节省空间,但是这种存储方式在跨平台的时候有很的大的问题

自定义类型-结构体(结构体,枚举,联合)2_整型_08

网络聊天发送数据的一种位段应用,节省空间到极致

自定义类型-结构体(结构体,枚举,联合)2_初始化_09


标签:ps,struct,自定义,比特,int,位段,枚举,结构
From: https://blog.51cto.com/u_15906483/7463762

相关文章

  • 12 获取类运行时的结构
    packageannotate;importjava.io.File;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;publicclassTest12{publicstaticvoidmain(String[]args)throwsException{Classc1=Body.clas......
  • 《动手学深度学习 Pytorch版》 5.4 自定义层
    5.4.1不带参数的层importtorchimporttorch.nn.functionalasFfromtorchimportnnclassCenteredLayer(nn.Module):def__init__(self):super().__init__()defforward(self,X):returnX-X.mean()#仅作减去均值的操作layer=......
  • 三级模式结构
        ......
  • ODPS/MaxComputer 自定义UDF、UDTF函数
    ODPS/MaxComputer自定义UDF、UDTF函数前置条件:创建Maven工程导入jar包和打包工具:<dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</ver......
  • 自定义镜像-镜像结构
       ......
  • Solution Set - 贪心和数据结构
    感觉自己好菜啊,这个专题真的不太会。CF1439CGreedyShoppingLink&Submission.容易发现,当此人连续买了一段物品之后,他的钱数至少减半。所以他最多只会买\(O(\logV)\)段物品。那么就可以直接模拟每次询问,不断往后轮流找最多能买到的位置和下一个能买的位置。二者都可以线段树......
  • java数据结构与算法_____选择排序
    importjava.util.Arrays;/***@authorGod*选择排序(Selectionsort)是一种简单直观的排序算法。*它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,*存放在序列的起始位置,直到全部待排序的数据元素排完。*选择排序是不稳定的排序方法(比如序列[5,5,3......
  • Eclipse自定义右键New菜单
    定制new菜单,点Window–>CustomizePerspective:选择new菜单所显示的快捷菜单......
  • 界面控件DevExpress WPF TreeMap,轻松可视化复杂的分层结构数据!
    DevExpressWPF TreeMap控件允许用户使用嵌套的矩形块可视化复杂的平面或分层结构数据。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用
    在我们创建界面元素的时候,不管在Vue3+ElementPlus的前端上,还是Winform桌面端上,都是会利用自定义用户控件来快速重用一些自定义的界面内容,对自定义用户控件的封装处理,也是我们开发WPF应用需要熟悉的一环。本篇随笔继续深入介绍介绍基于CommunityToolkit.Mvvm和HandyControl的WPF应......