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

自定义类型—枚举,联合(结构体,枚举,联合)3

时间:2023-09-15 17:07:03浏览次数:53  
标签:return 自定义 int 枚举 联合 printf 对齐 check

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

自定义类型—枚举,联合(结构体,枚举,联合)3_大小端_02

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

枚举类型是可以赋予初值的,即使不赋予,系统默认也会赋予初值,从0开始自增1。

自定义类型—枚举,联合(结构体,枚举,联合)3_大小端_04

枚举类型的大小是系统定义的,一般为一个整型。

自定义类型—枚举,联合(结构体,枚举,联合)3_整型_05

枚举是创建一种类型,一种枚举类型,define只是定义的标识符,系统计算的时候还是按照赋予的值来进行运算的。结构体创建的也是一种类型。

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

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_07

enum Color
{
	RED,
	YELLOW,
	BULE
};

enum Sex
{
	MALE = 2,
	FEMALE = 3,
	SECRET = 5
};

int main()
{
	enum Sex s = MALE;
	s = FEMALE;
	printf("%d %d %d\n", RED, YELLOW, BULE);
	printf("%d %d %d\n", MALE, FEMALE, SECRET);
	return 0;
}




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

联合体也叫共用体,一种特殊的自定义类型。从下图中可以看出,两个变量共用一个地址,在使用时只能同时使用其中一个变量。

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_09

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_10

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_11

通过联合体来判断电脑系统大小端存储的问题

下图为大小端存储示意图

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_12

int check_sys()
{
	int a = 1;
	return *(char*)&a;
	//返回1表示小端
	//返回0表示大端
}

int check_sys2()
{
	union U
	{
		char c;
		int i;
	}u;
	u.i = 1;
	return u.c;

	//返回1表示小端
	//返回0表示大端
}

int main()
{
	int ret = check_sys();
	if (1 == ret)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

函数check_sys使用强制转换地址类型,提取第一个字节的存储的内容来判断大小端问题,check_sys2则使用联合体的方式,来取出同一个地址下的第一个字节的内容来判断系统的大小端。

联合体大小的计算,计算对齐数,vs编译器默认对齐数为8

结构体大小的计算,需要通过对齐数计算

自定义类型—枚举,联合(结构体,枚举,联合)3_枚举类型_13

自定义类型—枚举,联合(结构体,枚举,联合)3_整型_14

位断操作为了节省空间,没有对齐数

枚举每一个变量的大小为一个整型

联合体需要通过对齐数计算得到

自定义类型—枚举,联合(结构体,枚举,联合)3_大小端_15


标签:return,自定义,int,枚举,联合,printf,对齐,check
From: https://blog.51cto.com/u_15906483/7483606

相关文章

  • 低代码开发平台 一款自定义软件开发平台源码
    低代码PaaS平台源码 采用对象方式实现字段、API的字段类型,引入RPA实现表自动化建模;再使用选择方式对地段功能进行选择定义甚至可以插入代码进行自定义。数字化转型的迫切需求随着数字科技的发展,各行各业对于新技术解决方案的需求也在逐日递增,非技术人员也开始被要求在短时间内构建......
  • 正则表达式和枚举概述
     一、正则表达式1、目的   正则表达式是独立于java的技术,不依附于java,但是它可以在java中使用,也可以在python/js等中使用   通过正则表达式处理字符串复杂的查找/替换/匹配/分割工作2、概述   使用单个字符串来描述或者匹配一系列符合某种语法规则的字符串3、使用步......
  • SpringBoot 自定义starter汇总
    1、SpringBootstarter机制SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息......
  • PivotGridControl自定义行数据的统计公式
    我们在使用PivotGridControl进行数据统计的时候,用时候需要在不同的行使用不同的汇总公式的情况,本文就是为了说明怎么实现此功能,如下图说明 数据源: 注意:此时数据列指定的SummaryType设置的是Sum;并且数据列指定了为double类型  SummaryType指定的几种聚合函数,Max、Min、......
  • 分享一个自定义颜色的侧边栏CSS
    很简单!将以下代码放入站点的css即可生效,css中的颜色可自定义修改RGB/HEX的颜色值~/**彩色滚动条样式开始*/::-webkit-scrollbar{width:10px;height:1px;}::-webkit-scrollbar-thumb{background-color:#a0c595;background-image:-webkit-linear-gradient(45......
  • 强强联合!数糖 × 和鲸:挖掘数据价值,赋能新零售快消
    8月28日,由数糖科技、和鲸社区联合出品的《〈中欧地理标志协定〉互认清单地理标志产品互联网传播声量及商业价值研究报告》(下简称“《报告》”)正式发布。《报告》聚焦《中欧地理标志协定》(下简称“《协定》”)互认清单所覆盖的550个产品,利用我国商务部的公开信息与从百度、今日......
  • 更改Eclipse下Tomcat的部署目录和自定义user library
     更改Eclipse下Tomcat的部署目录http://kingxss.iteye.com/blog/1741438自定义userlibrary......
  • 自定义内存分配在 uC/OS-II 中的应用
    uC/OS-II是一个广泛用于嵌入式系统的实时操作系统内核,它提供了强大的多任务管理和调度功能。在嵌入式应用中,内存管理是一个至关重要的问题,而uC/OS-II允许开发人员自定义内存分配策略,以满足不同应用的需求。本文将讨论在uC/OS-II中如何进行自定义内存分配,并提供相关的代码演示......
  • uni-app 自定义头部 安全距离
    APP.vue  divHeight:'', paddingHeight:'',方法uni.getSystemInfo({ success:(res)=>{ //获取到手机状态栏的高度 letmenuButtonInfo=uni.getMenuButtonBoundingClientRect() console.log('右边胶囊信息',menuButtonInfo) ......
  • 自定义类型-结构体(结构体,枚举,联合)2
       上节写到结构体对齐数,以及系统默认对齐数的修改,以及对齐数为何出现,实际上是牺牲一部分空间来换取读取速度也就是时间的方法。在这里插入一段结构体函数传参的内容以下代码为结构体初始化,使用自定义函数进行初始化,传递的时候使用了结构体地址。structS{ inta; charc......