首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))

上篇文章介绍了结构体相关的内容,大家可以点击链接进行浏览:c语言进阶部分详解(详细解析自定义类型——结构体,内存对齐,位段)-CSDN博客 各种源码大家可以去我的gitee主页进行查找:唔姆 (Nerowlp...) - Gitee.com 今天要介绍的是:枚举与联合的相关内容 一.枚举 枚举顾名思义就是一一列举 把可能的取值一一列举 1.枚举类型的定义 enum Sex//性别 { MALE, FEMALE...增加代码的可读性和可维护性 和#define定义的标识符比较枚举有类型检查,更加严谨。...Color cl = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异 二.联合(共用体) 1.联合类型的定义 联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员....联合的特点 联合的成员是共用同一块内存空间的,这样一个联合变量的大小, 至少是最大成员的大小 (因为联合至少得有能力保存最大的那个成员) 应用:判断当前计算机的大小端存储 union A //

12210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    读懂 TS 中联合类型和交叉类型的含义

    一、简单的联合类型 联合类型通常与 null 或 undefined 一起使用: const sayHello = (name: string | undefined) => { /* ... */ }...两个圆/椭圆相交,其相交部分表示两个集合(或类)的公共元素,两个圆/椭圆不相交(相离或相切,而实际上在文氏图中相切是没有什么意义的,因为文氏图是以图形的内部区域来表示的)则说明这两个集合(或类)没有公共元素...类型 Foo 是包含 foo 和 name 属性的所有对象的集合。 六、了解联合类型和交叉类型 有了这些知识,你现在就可以了解联合和交叉类型的含义了。...联合类型 A | B 表示一个集合,该集合是与类型A关联的一组值和与类型 B 关联的一组值的并集。...只有具有这三个属性(foo、bar 和 name)的对象才属于交集。 七、交叉类型的真实示例 联合类型非常普遍,所以让我们关注一个交叉类型的例子。

    6K20

    TypeScript 中的基础类型:原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型

    TypeScript 强大的类型系统使得开发者能够更轻松地编写可维护、可扩展的代码。本文将详细介绍 TypeScript 中的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型。...也可以手动指定枚举成员的数值。联合类型联合类型用于表示一个变量可以是多种类型之一。可以使用 类型1 | 类型2 | ... 的语法来声明联合类型。...例如:let value: string | number = "Hello"; // 联合类型value = 123; // 合法联合类型可以提供更大的灵活性,使得我们能够处理多种不同类型的值。...类型推断和类型断言TypeScript 具有强大的类型推断能力,它可以根据上下文自动推断变量的类型。例如,如果我们在定义变量时直接赋值,TypeScript 可以推断出变量的类型。...总结本文详细介绍了 TypeScript 的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型等方面。

    78130

    TypeScript 类型体操:合并映射类型的处理结果为联合类型

    再来讲为什么: keyof Obj 我们知道是 key 构成的联合类型 'name' | 'age' | 'height'。...: 而传入联合类型的时候,会分别传入每个类型做处理,也就是这样的: 所以直接在这里取 keyof Obj 的所有索引值: 总结一下:当我们需要把索引分开的时候,可以加一层映射类型,在值的位置对每个索引做处理...,然后再传入 keyof Xxx 来取处理过后的值的联合类型。...这样的结果就是对每个索引做了递归的处理,并且把所有索引的处理结果合并到了一起: 回顾下这个案例,它也是要把每个索引的处理结果分开,通过联合类型合并在一起。具体每个索引是做递归的处理,记录路径。...但如果你想对每个索引分别做处理,并且把结果合并为一个联合类型的时候,可以加一层映射类型来分别处理每个索引,再取 keyof Xxx,也就是每个索引类型的处理结果构成的联合类型。

    1.8K40

    自定义类型:联合体和枚举类型(联合体与结构体的区别)

    联合体: 一、联合体类型的声明 像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。...示例如下: //联合类型的声明 union Un { char c; int i; }; int main() { //联合变量的定义 union Un un = { 0 }; un.i =...联合体(union):通常用于节省内存,在多个不同类型的数据中只使用其中的一个。例如,一个程序可能需要处理来自不同数据源的数据,这些数据可能有不同的类型和大小,但在任何时候只处理其中的一种。...通过使用联合体,可以避免浪费内存来存储不会同时使用的多个数据成员。 三、联合体的用例 3.1问:如何打印int类型每一个字节存储的数据?...答:我们可以利用联合体的特性把一个int类型的数据,和一个装着四个char类型的结构体放在一个联合体中,这样int的每个字节都对应着一个结构体中的char类型。

    14210

    Excel公式练习59: 获取与满足多个查找条件的所有值

    导语:本文所讲的案例在第一季公式练习中有相似的例子,这里再巩固一下。只要知道要在公式中使用的函数,没有Excel解决不了的问题!...本次的练习是:如下图1所示,单元格区域A1:E25中存放着数据,列D中是要查找的值需满足的条件,列I和列J中显示查找到的结果,示例中显示的是1月份南区超市销售的蔬菜及其数量。 ?...图1 要求在I2中输入公式,向右向下拖拉以获取全部满足条件的数据。 先不看答案,自已动手试一试。...公式解析 公式中的: COUNTIFS($A:$A,$G$6,$B:$B,$G$9,$C:$C,$G$3)<ROWS($I$2:I2) 用来计算符合条件的结果数(本例中为5),并与已放置值的单元格数(已返回的值...FALSE;TRUE;TRUE;FALSE;TRUE}=3 转换为: {1;1;2;2;1;2;0;0;1;1;0;1;2;2;3;3;2;3;1;1;3;3;1;2}=3 数组中有5个3,表明有5条数据满足条件

    2.8K20

    实现Nest中参数的联合类型校验

    前言 在nest的dto层对参数进行校验时,某个参数可能有多种类型,遇到这种情况你会怎么处理?本文将跟大家分享这个问题的解决方案,欢迎各位感兴趣的开发者阅读本文。...场景概述 我们在进行接口开发时,客户端需要传入一个名为text的字段,它可能是string类型或Array类型(在TS中我们把这种关系称之为 联合类型 ),class-validator...: boolean; } 启动项目,用postman测试后发现并不好使,传了array类型的数据又要求是string类型,传了string类型的数据又要求是array类型。...: any; }; ❝有一部分开发者可能比较迷惑,不是说ts用any是可耻行为吗,这我就要纠正下你了,既然它存在自然有使用场景。...在我这个场景中,对象里所有key的类型校验都手动处理了,如果在此处定义了它的类型,在校验函数中就会报黄色警告,因此针对于需要手动校验类型的场景而言,使用any是最合适的。

    1.3K20

    满足条件的子序列数目(排序+二分查找+快速幂)

    请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,请将结果对 10^9 + 7 取余后返回。...示例 1: 输入:nums = [3,5,6,7], target = 9 输出:4 解释:有 4 个子序列满足该条件。...3,5,6] -> (3 + 6 <= 9) [3,6] -> (3 + 6 <= 9) 示例 2: 输入:nums = [3,3,6,8], target = 10 输出:6 解释:有 6 个子序列满足该条件...], [3,6] , [3,6] , [3,3,6] 示例 3: 输入:nums = [2,3,3,4,6,7], target = 12 输出:61 解释:共有 63 个非空子序列,其中 2 个不满足条件...([6,7], [7]) 有效序列总数为(63 - 2 = 61) 示例 4: 输入:nums = [5,2,4,1,7,6,8], target = 16 输出:127 解释:所有非空子序列都满足条件

    82620

    联合索引在B+树上的存储结构及数据查找方式

    本文主要讲解的内容有: 联合索引在B+树上的存储结构 联合索引的查找方式 为什么会有最左前缀匹配原则 在分享这篇文章之前,我在网上查了关于MySQL联合索引在B+树上的存储结构这个问题,翻阅了很多博客和技术文章...首先,表T1有字段a,b,c,d,e,其中a是主键,除e为varchar其余为int类型,并创建了一个联合索引idx_t1_bcd(b,c,d),然后b、c、d三列作为联合索引,在B+树上的结构正如上图所示...d)也会生成一个索引树,同样是B+树的结构,只不过它的data部分存储的是联合索引所在行的主键值(上图叶子节点紫色背景部分),至于为什么辅助索引data部分存储主键值上篇文章也有介绍,感兴趣或还不知道的可以去看一下...由于联合索引是上述那样的索引构建方式及存储结构,所以联合索引只能从多列索引的第一列开始查找。...如果有机会,希望再对本文未涉及的部分进行补充吧。 创作不易,如果对你有帮助,请不要吝啬你的赞,这对我是很大的鼓励~

    3.2K20

    TypeScript 联合类型的定义、使用场景和注意事项

    使用联合类型类型断言当我们使用联合类型的变量时,有时候需要告诉 TypeScript 具体的类型,以便进行相应的操作。可以使用类型断言(Type Assertion)来实现。...交叉类型与联合类型的结合在 TypeScript 中,还可以使用交叉类型(Intersection Types)和联合类型结合使用,从而实现更复杂的类型定义。...联合类型的限制和注意事项在使用联合类型时,需要注意以下几点:联合类型只能使用联合类型的公共属性或方法,即类型中共有的属性和方法;联合类型不会进行类型缩小,即不能在运行时判断具体的类型;无法对联合类型的变量进行修改...总结本文详细介绍了 TypeScript 联合类型的定义、使用场景和注意事项,并提供了一些示例帮助理解。我们学习了如何使用类型断言和类型保护来处理联合类型的变量,以及如何结合交叉类型使用联合类型。...通过灵活使用联合类型,我们可以处理多种类型的变量,提高代码的可读性和可维护性。在实际开发中,根据具体的需求选择合适的联合类型,有助于编写出更健壮和可靠的 TypeScript 代码。

    1K41

    面试算法,在绝对值排序数组中快速查找满足条件的元素配对

    对于这个题目,我们曾经讨论过当数组元素全是整数时的情况,要找到满足条件的配对(i,j),我们让i从0开始,然后计算m = k - A[i],接着在(i+1, n)这部分元素中,使用折半查找,看看有没有元素正好等于...m,如果在(i+1,n)中存在下标j,满足A[j] == m 那么我们就可以直接返回配对(i,j),这种做法在数组元素全是正数,全是负数,以及是绝对值排序时都成立,只是在绝对值排序的数组中,进行二分查找时...因此在查找满足条件的元素配对时,我们先看看前两种情况是否能查找到满足条件的元素,如果不行,那么我们再依据第三种情况去查找,无论是否存在满足条件的元素配对,我们算法的时间复杂度都是O(n)。..." and " + this.sortedArray[this.indexJ]); } } } 类FindPairInAbsoluteSortedArray用于在绝对值排序的数组中查找满足条件的元素配对...,它先根据两元素都是正数的情况下查找,然后再根据两元素都是负数的情况下查找,如果这两种情况都找不到,再尝试两元素一正一负的情况下查找,如果三种情况都找不到满足条件的元素,那么这样的元素在数组中不存在。

    4.3K10

    初识TypeScript:查找指定路径下的文件按类型生成json

    下面的方法为查找指定路径下的文件,并将所有文件的绝对路径存储到一个临时的数组中: 1 let temp: string[] = new Array(); 2 function fileDisplay...,any类型是ts中的一种特殊类型,它可以被定义为任何一种其他类型,这里将它定义为了一种大括号类型的数据结构,代表它的内部还有一些其他的任意成员变量。...: 测试第四行 代表a中有一个键(变量名)为b的成员,它的值为字符串c 测试第五行 代表a中有一个键(变量名)为c的成员,它的值为数字类型5.6(ts中所有的数字类型均为浮点型,省去了很多其他编程语言中值类型数据的繁琐分类...exe所在路径下的文件查找和生成json,这样即使是程序白痴也能用了。...打开看一下生成的json是否让人满意:(只截取了一部分) ?

    3.3K10

    关于静态常量类型 修饰 类方法变量的部分理解

    分两个部分进行记录 目录 静态(static) 修饰类/方法/变量 静态(static) 修饰类 静态(static) 修饰方法/变量 常量(final) 修饰类/方法/变量 常量(final) 修饰类...静态(static) 修饰方法/变量 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写{这里之所以不能被重写,是因为重写的目的在与多态的使用,因为是静态的方法,无法实现多态,所以就算重写也是无用的...重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。 常量(final) 修饰类/方法/变量 常量(final) 修饰类 final 修饰的类不能被继承。...常量(final) 修饰方法/变量 1.final修饰的成员和成员变量,可以被继承。 2.final修饰的方法可以被继承不能被重写(这个一定是不能重写的,因为重写在初始化的时候是会报错的)。...final 修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有 一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。

    88920
    领券